Page 1 sur 1

Jointure dans une requete SQL

Posté : 21 mai 2012, 18:44
par guim06
Bonjour à tous, j'ai un souci de syntaxe dans ma requête, pourriez vous m'apporter vos lumières ??

Code : Tout sélectionner

$all = mysql_query("SELECT title,data_txt FROM jos_sobi2_item,jos_sobi2_fields_data WHERE jos_sobi2_item.itemid=jos_sobi2_fields_data.itemid ORDER BY itemid DESC") or die ('et non');
Merci beaucoup

Re: Jointure dans une requete SQL

Posté : 21 mai 2012, 20:26
par Mazarini
or die(mysql_error()) pour avoir une message d'erreur.

Re: Jointure dans une requete SQL

Posté : 22 mai 2012, 09:35
par guim06
merci pour votre aide,
j'ai modifié ma requête en :

Code : Tout sélectionner

$everyall = mysql_query(" SELECT jos_sobi2_item.title, jos_sobi2_fields_data.data_txt FROM jos_sobi2_item LEFT JOIN jos_sobi2_fields_data ON jos_sobi2_item.itemid=jos_sobi2_fields_data.itemid ORDER BY itemid DESC ") or die (mysql_error());
et ça m'a donné : Column 'itemid' in order clause is ambiguous

Re: Jointure dans une requete SQL

Posté : 22 mai 2012, 09:40
par guim06
ça avance :

Code : Tout sélectionner

$everyall = mysql_query(" SELECT jos_sobi2_item.title, jos_sobi2_fields_data.data_txt FROM jos_sobi2_item LEFT JOIN jos_sobi2_fields_data ON jos_sobi2_item.itemid=jos_sobi2_fields_data.itemid ORDER BY jos_sobi2_item.itemid DESC ") or die (mysql_error());
avec ça, j'obtiens des résultats, mais un peu dans le désordre.

Re: Jointure dans une requete SQL

Posté : 22 mai 2012, 11:55
par Mazarini
Le critère de tri que tu as mis est jos_sobi2_item.itemid. Affiche sa valeur pour juger du "désordre".

Re: Jointure dans une requete SQL

Posté : 22 mai 2012, 15:30
par guim06
Mille excuses,
le problème de ce fameux désordre vient d'autre part, je m'explique :
- tout d'abord le code pour afficher et organiser les valeurs :

Code : Tout sélectionner

<table id="" width="660" height="" border="0" cellpadding="0" cellspacing="0"> <tr> <td>Niveau</td> <td>Enseigne</td> <td>Activit&eacute;</td> <td>Rep&egrave;res</td> </tr> <?php while ($row = mysql_fetch_array($requete1)) { echo(" <tr> <td>".$row["data_txt"]."</td> <td>".$row["title"]."</td> <td>".$row["data_txt"]."</td> <td>".$row["data_txt"]."</td> </tr> ") ; } ?> </table>
Comme vous pouvez le remarquer, j'ai 3 cellules qui contiennent $row["data_txt"],
en fait, avant d'éditer la requête du dessus, j'avais 4 requêtes différentes, l'idée est de les rassembler en une seule :

Code : Tout sélectionner

$titles = mysql_query("SELECT title FROM jos_sobi2_item ORDER BY itemid DESC"); $reperes = mysql_query("SELECT data_txt FROM jos_sobi2_fields_data WHERE fieldid='20' ORDER BY itemid DESC"); $activites = mysql_query("SELECT data_txt FROM jos_sobi2_fields_data WHERE fieldid='18' ORDER BY itemid DESC"); $niveaux = mysql_query("SELECT data_txt FROM jos_sobi2_fields_data WHERE fieldid='16' ORDER BY itemid DESC");
mais j'ai oublié de préciser les condition WHERE fieldid='xx'

en fait, la base de donnée sur laquelle je travaille est une base du plugin "sobi" de joomla,
via l'interface, j'ai un contenu qui possède un titre, un repère, une activité et un niveau.
Côté BDD, j'ai le titre dans un champs "title" de la table jos_sobi2_item,
et les trois autres valeurs (repère / activité / niveau) dans un champs data_txt de la table jos_sobi2_fields_data.
on différencie ces 3 valeurs à l'aide fonction du champs fieldid de la table jos_sobi2_fields_data (repère : fieldid='20' / activité : fieldid='18'/ niveau : fieldid='16')
le seul lien qui lie ces 2 tables est le champs itemid.

voili voilou, vous savez tout.
En fait, pour concrétiser la requête, je dois ajouter les conditions un peu de cette manière :

Code : Tout sélectionner

<?php while ($row = mysql_fetch_array($requete1)) { echo(" <tr> <td>".$row["data_txt"]."</td> // WHERE fieldid='16' <td>".$row["title"]."</td> <td>".$row["data_txt"]."</td> // WHERE fieldid='18' <td>".$row["data_txt"]."</td> // WHERE fieldid='20' </tr> ") ; } ?>