Left join php/MySQL et valeur null

Fermé
AdminTOURS Messages postés 404 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 14 janvier 2011 - 31 mars 2010 à 12:15
AdminTOURS Messages postés 404 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 14 janvier 2011 - 31 mars 2010 à 13:48
Bonjour,

je bloque sur une requête, car mon code ne renvoie pas les valeurs nulles, mais comme mon PHP MyAdmin fait la même chose, ce doit être un problème de syntaxe SQL.

Je souhaite afficher un tableau à double entrée en utilisant des boucles pour éviter une requête par case, c'est pour un championnat, j'ai une table pilote et une table résultat et je souhaite afficher les points des pilotes sachant qu'ils n'ont pas forcément participé à la compétition. Je me suis donc tourné vers le left join, mais, les valeurs qui n'existent pas ne sont pas affichées, donc si un pilote n'a participé qu'à la dernière course de la saison, ses points se trouvent en 1ère colonne.

Mon code :

SELECT points
		FROM 'resultat_gp'
		left join 'pilotes' on resultat_pilote =  pilotes_id
		where  pilotes_id = $pilote
		and  resultat_gp in (SELECT gp_idx
		FROM liste_gp
		left join circuit_f1 c on liste_gp.f1_idx = c.f1_cle
		where gp_date >= '$annee'
		AND gp_date < '$anneesup' 
		 and gp_discipline = 'F1'
		order by gp_date)
		ORDER BY resultat_gp, points


Des idées pour afficher la valeur null ? j'ai testé des trucs comme
and points is null
mais non...

Merci !
A voir également:

2 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
31 mars 2010 à 13:26
Bonjour,

Je ne sais pas ce que prend MySQL par défaut quand on met LEFT JOIN.
Dans ton cas, il faudrait que tu mettes LEFT OUTER JOIN, et que tu partes de la table des pilotes :

SELECT 'resultat_gp'.points
FROM pilotes
LEFT OUTER JOIN 'resultat_gp' ON resultat_pilote = pilotes_id
where pilotes_id = $pilote
and resultat_gp in (SELECT gp_idx
FROM liste_gp
left join circuit_f1 c on liste_gp.f1_idx = c.f1_cle
where gp_date >= '$annee'
AND gp_date < '$anneesup'
and gp_discipline = 'F1'
order by gp_date)
ORDER BY resultat_gp, points

Par contre, tu as une colonne qui a le même nom qu'une table, tu devrais y remédier : ce n'est pas très clair...

Xavier
1
AdminTOURS Messages postés 404 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 14 janvier 2011 92
31 mars 2010 à 13:48
Heu oui, j'me suis planté de version effectivement, il faut bien partir de la table pilotes, merci ! (et bien inverser : on pilotes_id = resultat_pilote)

Pour le "outer", normalement MySQL l'ajoute, j'ai essayé, pas de changement... Sur certains forums ils parlent d'une condition supplémentaire
and points is null
par exemple, mais même résultat, je sais plus trop quelle combinaison faire... Parce que le calcul case par case... bof bof

Tu penses que le nom du champ du même nom que la table peut influer (j'avoue que ce n'est pas bien malin...) ?

Une petite question : il semble qu'il y ait une différence entre l'appel d'une table entre cote ou non, peut-être pas dans ce genre de requête, mais il semble y avoir un impact, tu sais lequel ?

Merci en tout cas pour la réponse.
0