Page 1 sur 1

select et valeur null

Posté : 01 févr. 2006, 15:36
par jeff
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?

Posté : 01 févr. 2006, 15:45
par zeus
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

Posté : 01 févr. 2006, 15:49
par jeff
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 :(

Posté : 01 févr. 2006, 15:59
par jeff
dans mon ca il faut utiliser is null
 AND (ARTICLE.id_image=IMAGE.id_image OR is null ARTICLE.id_image )
merci

Posté : 01 févr. 2006, 16:00
par Cyrano
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