select et valeur null

Mammouth du PHP | 1311 Messages

01 févr. 2006, 15:36

salut
j'effectue cette requete
SELECT id_page_article,ARTICLE.contenu as contenu,ARTICLE.title as atitle,IMAGE.name as img,THEME.name as pathimg,XSLT.name as xslt FROM PAGE_ARTICLE,PAGE,ARTICLE,IMAGE,THEME,XSLT,USERS WHERE PAGE_ARTICLE.id_page=PAGE.id_page AND PAGE_ARTICLE.id_article=ARTICLE.id_article AND ARTICLE.id_image=IMAGE.id_image AND IMAGE.id_theme=THEME.id_theme AND ARTICLE.id_xslt=XSLT.id_xslt AND ARTICLE.id_users=USERS.id_users
on retrouve dans cette une table article avec un champs id_image
ce champs peut etre optionnel(null)
mon probleme si ce champs est null ma requete ne renvoi pas les lignes ou id_image est null

comment faire
merci?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

01 févr. 2006, 15:45

Ta requete ne sélectionne les article.id_image que s'ils existent dans la table images, c'est donc normal qu'elle ne sélectionne pas les lignes où article.id_image est NULL

Pour cela, il te suffit de sélectionner les lignes qui ont une correspondance dans la table images OU qui ont articles.id_image à NULL

NB : l'indentation, ça permet également de clarifier les requêtes SQL ;)

Code : Tout sélectionner

SELECT id_page_article, ARTICLE.contenu as contenu, ARTICLE.title as atitle, IMAGE.name as img, THEME.name as pathimg, XSLT.name as xslt FROM PAGE_ARTICLE, PAGE, ARTICLE, IMAGE, THEME, XSLT, USERS WHERE PAGE_ARTICLE.id_page=PAGE.id_page AND PAGE_ARTICLE.id_article=ARTICLE.id_article AND (ARTICLE.id_image=IMAGE.id_image OR ARTICLE.id_image = NULL) AND IMAGE.id_theme=THEME.id_theme AND ARTICLE.id_xslt=XSLT.id_xslt AND ARTICLE.id_users=USERS.id_users
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1311 Messages

01 févr. 2006, 15:49

pardon pour l'indentation

il y a vraiment pas moyen de passer outre sans faire comme ceci

Code : Tout sélectionner

AND (ARTICLE.id_image=IMAGE.id_image OR ARTICLE.id_image = NULL)
le truc c'est que la requete est genere automatiquement a partir d'un fichier XML, donc je vais devoir trouver un truc pour ecrire la deuxieme condition

ps:d'ailleur ta soluce ne fonctionne pas :(

Mammouth du PHP | 1311 Messages

01 févr. 2006, 15:59

dans mon ca il faut utiliser is null
 AND (ARTICLE.id_image=IMAGE.id_image OR is null ARTICLE.id_image )
merci

Mammouth du PHP | 19672 Messages

01 févr. 2006, 16:00

Avec une jointure gauche tu pourrais sans doute y parvenir: sous réserve, teste comme ceci:

Code : Tout sélectionner

SELECT id_page_article, ARTICLE.contenu as contenu, ARTICLE.title as atitle, IMAGE.name as img, THEME.name as pathimg, XSLT.name as xslt FROM PAGE_ARTICLE, PAGE, ARTICLE, THEME, XSLT, USERS LEFT JOIN IMAGE ON IMAGE.id_image = ARTICLE.id_image WHERE PAGE_ARTICLE.id_page = PAGE.id_page AND PAGE_ARTICLE.id_article=ARTICLE.id_article AND IMAGE.id_theme=THEME.id_theme AND ARTICLE.id_xslt=XSLT.id_xslt AND ARTICLE.id_users=USERS.id_users
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: