afficher ligne group by meme si pas de valeurs - SQL/NoSQL - Programmation
Marsh Posté le 18-04-2006 à 10:37:27
Il te faut une jointure externe
Code :
|
Marsh Posté le 18-04-2006 à 10:46:21
merci beaucoup
Je ne connaissais pas ce type de jointure, c'est intéressant .
Autre petite question : J'utilise cette requete pour afficher les resultat sur une page web.
Comment puis-je récupérer les noms des champs ('Etat' et 'Nombre de dossiers') automatiquement pour les mettre en en-tete de tableau (dans un <th></th> ) ?
j'en ai besoin pour traiter pas mal de requetes différentes dont l'ordre, le nombre et la nature des champs sont différents.
merci de ton aide
Marsh Posté le 18-04-2006 à 11:12:17
J'imagine que tu utilises du code PHP pour attaquer une base mySql :
http://www.manuelphp.com/php/funct [...] d-name.php
Marsh Posté le 18-04-2006 à 14:51:37
C'est encore moi
Bon, j'ai vraiment du mal avec les jointures, surtout que la je dois en faire 2 en meme temps :
SELECT Z.lib_zone_geo AS 'Zone géographique', COUNT(distinct D.code_dossier) AS 'Nombre de bénéficiaires'
FROM (ZONE_GEO Z
LEFT JOIN DEMANDEUR M ON Z.code_zone_geo = M.code_zone_geo)
INNER JOIN DOSSIER D ON M.code_demandeur = D.code_demandeur
WHERE code_etat = 8
GROUP BY Z.code_zone_geo
ORDER BY lib_zone_geo
En gros, je veux le nombre de dossier par zone_geo où code_etat = 8
Actuellement ma requete affiche bien les dossiers dans ce cas mais je voudrais aussi qu'elle m'affiche TOUTES les zone_geo meme si il ya 0 dossiers (meme probleme que 3 post au dessus en fait)
Je continue a bidouiller de mon coté
Marsh Posté le 18-04-2006 à 15:05:54
Peut-être en mettant DEMANDEUR comme table principale et les 2 autre tables en jointure externe ...
SELECT Z.lib_zone_geo AS 'Zone géographique', COUNT(distinct D.code_dossier) AS 'Nombre de bénéficiaires'
FROM DEMANDEUR M
LEFT JOIN ZONE_GEO Z ON Z.code_zone_geo = M.code_zone_geo
LEFT JOIN DOSSIER D ON M.code_demandeur = D.code_demandeur
WHERE Z.code_etat = 8
GROUP BY Z.code_zone_geo
ORDER BY lib_zone_geo;
Marsh Posté le 18-04-2006 à 15:21:36
Et comme ça ?
SELECT Z.lib_zone_geo AS Zone_geographique, COUNT(DISTINCT D.code_dossier) AS Nombre_de_beneficiaires
FROM ZONE_GEO Z
LEFT JOIN DEMANDEUR M ON Z.code_zone_geo = M.code_zone_geo
LEFT JOIN DOSSIER D ON M.code_demandeur = D.code_demandeur
WHERE code_etat = 8
GROUP BY Z.lib_zone_geo
ORDER BY Z.lib_zone_geo;
Marsh Posté le 18-04-2006 à 15:27:11
Non plus
Ca fait 2h que j'essaye toutes les solutions avec des left join right join.. Je commence a m'arracher les cheveux la en fait.
La seule requete qui marche c'est :
SELECT Z.lib_zone_geo AS 'Zone géographique', COUNT(distinct M.code_demandeur) AS 'Nombre de bénéficiaires'
FROM (ZONE_GEO Z
LEFT JOIN DEMANDEUR M ON Z.code_zone_geo = M.code_zone_geo)
GROUP BY Z.code_zone_geo
Mais c'est pas ce que je veux, dès que je rajoute une jointure et donc une table.. tout plante!
Jvais craquer dans pas longtemps
Marsh Posté le 18-04-2006 à 15:31:04
Déjà, tu ne devrais pas faire un group by sur code_zone_geo et afficher lib_zone_geo ... mySql te laisse faire mais en réalité il doit afficher une valeur au hasard pour lib_zone_geo q'il y en a plusieurs par code_zone_geo !
D'autre part, tu tournes sur quelle version de mySql ?
Tu devrais pouvoir t'en sortir avec une sous-requête, du style LEFT JOIN (SELECT ... FROM table1, table2), ou encore LEFT JOIN (SELECT ... FROM table1 LEFT JOIN table2 ...).
Marsh Posté le 18-04-2006 à 15:54:38
Alors pour le group by, oui, il est foireux, mais le problme reste le meme
version sql : MySQL - 4.0.26-debug
je vais tenter avec sous-requete mais jsuis au bord du suicide la
Marsh Posté le 18-04-2006 à 16:37:02
Bon allez ca me les brise, je ferais autant de requete qu'il ya de zone geo, et BASTA
Merci pour ton aide en tous cas.
@+
Marsh Posté le 18-04-2006 à 09:59:17
Salut
Voila mon probleme :
D'un coté j'ai une table ETAT_DOSSIER contenant un code_etat et un titre_etat pour chaqu'un de mes 8 etats
De l'autre j'ai une table DOSSIER défini par un code_dossier
Je fais une requete qui pour chaque etat de dossier me compte le nombre de dossier :
Ca marche mais probleme : je n'ai en retour que les ETATS de dossier qui correspondent à au moins un dossier.
Par exemple: l'etat "DOSSIER CLOTURé" ne correspond pour l'instant à aucun dossier, et dans le resultat de la requete au lieu d'avoir :
je n'ai carrément pas de ligne.
Comment remédier a cela?
merci !