problème de requête... retourn quasi rien

Le
Marc Collin
salut

avec mysql,

j'ai une table news avec le champ nonews.

j'ai une table article avec le champ nonews.
j'ai une table liens avec le champ nonews.
j'ai une table composants avec le champ nonews.
j'ai une table livre avec le champ nonews.

j'ai tenté d'aller cherche tous les info des tables qui sont des news
avec cette requete:

SELECT art_titre, art_texte, com_lien, com_nom, liv_titre, lie_nom,
lie_lien
FROM news
INNER JOIN article ON article.new_nonews = news.new_nonews
INNER JOIN livre ON livre .new_nonews = news.new_nonews
INNER JOIN liens ON liens .new_nonews = news.new_nonews
INNER JOIN composant ON composant .new_nonews = news.new_nonews
order by news.new_nonews;

sous phpadmin, lorsque je fais exécuter cette requete,

il me sort ça comme la requête:
SELECT *
FROM news

il n'y a donc pas les autres info des tabes

et en php, je fais appel à cette requete et vue qu'il me sort que les
éléments de news il me retourne donc rien:

function returnews()
{
echo '<div id="main"><table>';
$requete = mysql_query("SELECT art_titre, art_texte, com_lien,
com_nom, liv_titre, lie_nom, lie_lien FROM news INNER JOIN article ON
article.new_nonews = news.new_nonews INNER JOIN livre ON livre
.new_nonews = news.new_nonews INNER JOIN liens ON liens .new_nonews =
news.new_nonews INNER JOIN composant ON composant .new_nonews =
news.new_nonews order by news.new_nonews;");

if ( mysql_num_rows($requete) != 0 )
{
while ($ligne = mysql_fetch_assoc($requete))
{
if ($ligne["art_titre"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['art_titre'].'</td></tr>';
else if($ligne["com_nom"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['com_nom'].'</td></tr>';
else if($ligne["liv_titre"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['liv_titre'].'</td></tr>';
else if($ligne["lie_nom"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['lie_nom'].'</td></tr>';
}
}
echo '</table></div><br/>';
}


quelqu'un a une idée?


--
Borland rulez http://pages.infinit.net/borland
--
Borland rulez http://pages.infinit.net/borland
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Antoine Dinimant
Le #21711661
Marc Collin a écrit:
j'ai une table news avec le champ nonews....

j'ai une table article avec le champ nonews....
j'ai une table liens avec le champ nonews....


(...)

d'après ta requête, il s'agirait plutôt d'un champ new_nonews

j'ai tenté d'aller cherche tous les info des tables qui sont des news
avec cette requete:

SELECT art_titre, art_texte, com_lien, com_nom, liv_titre, lie_nom,
lie_lien
FROM news
INNER JOIN article ON article.new_nonews = news.new_nonews
INNER JOIN livre ON livre .new_nonews = news.new_nonews
INNER JOIN liens ON liens .new_nonews = news.new_nonews
INNER JOIN composant ON composant .new_nonews = news.new_nonews
order by news.new_nonews;



tu ne fais que des INNER JOIN, donc pour qu'une news apparaisse il faut
qu'elle soit référencée dans TOUTES les autres tables... est-ce le cas ?
sinon, je suppose qu'avec des LEFT OUTER JOIN ça passerait mieux...
Fred BROUARD - SQLpro
Le #21711651
outre les innner join qui font que seul les news présente dans toutes les tables sont récupérées, le tri est externe !

essaye déjà :

SELECT art_titre, art_texte, com_lien, com_nom, liv_titre, lie_nom,
lie_lien
FROM news n
LETF OUTER JOIN article a
ON a.new_nonews = n.new_nonews
LETF OUTER JOIN livre lv
ON lv.new_nonews = n.new_nonews
LETF OUTER JOIN liens ln
ON ln.new_nonews = n.new_nonews
LETF OUTER JOIN composant c
ON c.new_nonews = n.new_nonews

Sans clause ORDER BY

En principe pour trier il faut que la colonne soit présente dans la clause SELECT de l'ordre SELECT.

A +


--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


Marc Collin a écrit:
salut

avec mysql,

j'ai une table news avec le champ nonews....

j'ai une table article avec le champ nonews....
j'ai une table liens avec le champ nonews....
j'ai une table composants avec le champ nonews....
j'ai une table livre avec le champ nonews....

j'ai tenté d'aller cherche tous les info des tables qui sont des news
avec cette requete:

SELECT art_titre, art_texte, com_lien, com_nom, liv_titre, lie_nom,
lie_lien
FROM news
INNER JOIN article ON article.new_nonews = news.new_nonews
INNER JOIN livre ON livre .new_nonews = news.new_nonews
INNER JOIN liens ON liens .new_nonews = news.new_nonews
INNER JOIN composant ON composant .new_nonews = news.new_nonews
order by news.new_nonews;

sous phpadmin, lorsque je fais exécuter cette requete,

il me sort ça comme la requête:
SELECT *
FROM news

il n'y a donc pas les autres info des tabes...

et en php, je fais appel à cette requete et vue qu'il me sort que les
éléments de news... il me retourne donc rien:

function returnews()
{
echo '<div id="main"><table>';
$requete = mysql_query("SELECT art_titre, art_texte, com_lien,
com_nom, liv_titre, lie_nom, lie_lien FROM news INNER JOIN article ON
article.new_nonews = news.new_nonews INNER JOIN livre ON livre
.new_nonews = news.new_nonews INNER JOIN liens ON liens .new_nonews =
news.new_nonews INNER JOIN composant ON composant .new_nonews =
news.new_nonews order by news.new_nonews;");

if ( mysql_num_rows($requete) != 0 )
{
while ($ligne = mysql_fetch_assoc($requete))
{
if ($ligne["art_titre"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['art_titre'].'</td></tr>';
else if($ligne["com_nom"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['com_nom'].'</td></tr>';
else if($ligne["liv_titre"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['liv_titre'].'</td></tr>';
else if($ligne["lie_nom"] <> '')
echo '<tr><td>'.$ligne['new_date'].',
'.$ligne['lie_nom'].'</td></tr>';
}
}
echo '</table></div><br/>';
}


quelqu'un a une idée?


Marc Collin
Le #21711631
Fred BROUARD - SQLpro wrote:

outre les innner join qui font que seul les news présente dans toutes
les tables sont récupérées, le tri est externe !

essaye déjà :

SELECT art_titre, art_texte, com_lien, com_nom, liv_titre, lie_nom,
lie_lien
FROM news n
LETF OUTER JOIN article a
ON a.new_nonews = n.new_nonews
LETF OUTER JOIN livre lv
ON lv.new_nonews = n.new_nonews
LETF OUTER JOIN liens ln
ON ln.new_nonews = n.new_nonews
LETF OUTER JOIN composant c
ON c.new_nonews = n.new_nonews

Sans clause ORDER BY

En principe pour trier il faut que la colonne soit présente dans la
clause SELECT de l'ordre SELECT.

A +




merci à vous deux, ça fonctionne

je voudrais rajouter un truc...

sachant que dans les tables:

article, livre, liens, composant j'ai un champ sou_nosousection

et que dans ma table soussection j'ai un champ, sou_sousection et
sec_nosection

et que dans ma table section j'ai un champ sec_nosection et sec_nomsection

je voudrais donc afficher le nom de la section pour chaque donnée
retourné de la requete que vous avez créer


SELECT a1.art_titre, c1.com_lien, c1.com_nom, lv1.liv_titre,
ln1.lie_nom, ln1.lie_lien, sec_nomsection
FROM news n, soussection ss,section s
LEFT OUTER JOIN article a1
ON a1.new_nonews = n.new_nonews
LEFT OUTER JOIN livre lv1
ON lv1.new_nonews = n.new_nonews
LEFT OUTER JOIN liens ln1
ON ln1.new_nonews = n.new_nonews
LEFT OUTER JOIN composant c1
ON c1.new_nonews = n.new_nonews
inner JOIN article a2
ON a2.sou_nosoussection = ss.sou_nosoussection
inner JOIN livre lv2
ON lv2.sou_nosoussection = ss.sou_nosoussection
inner JOIN liens ln2
ON ln2.sou_nosoussection = ss.sou_nosoussection
inner JOIN composant c2
ON c2.sou_nosoussection = ss.sou_nosoussection
inner JOIN soussection
ON ss.sec_nosection = s.sec_nosection

mais les données sorte en triple...

encore pire avec:

SELECT a1.art_titre, c1.com_lien, c1.com_nom, lv1.liv_titre,
ln1.lie_nom, ln1.lie_lien, sec_nomsection
FROM news n, soussection ss, section s
LEFT OUTER JOIN article a1 ON a1.new_nonews = n.new_nonews
LEFT OUTER JOIN livre lv1 ON lv1.new_nonews = n.new_nonews
LEFT OUTER JOIN liens ln1 ON ln1.new_nonews = n.new_nonews
LEFT OUTER JOIN composant c1 ON c1.new_nonews = n.new_nonews
LEFT OUTER JOIN article a2 ON a2.sou_nosoussection = ss.sou_nosoussection
LEFT OUTER JOIN livre lv2 ON lv2.sou_nosoussection = ss.sou_nosoussection
LEFT OUTER JOIN liens ln2 ON ln2.sou_nosoussection = ss.sou_nosoussection
LEFT OUTER JOIN composant c2 ON c2.sou_nosoussection =
ss.sou_nosoussection
INNER JOIN soussection ON ss.sec_nosection = s.sec_nosection

je m'attendais avoir le résultat escompté avec la première solution...

--
Borland rulez http://pages.infinit.net/borland
Publicité
Poster une réponse
Anonyme