Jointure dans une requete SQL

guim06
Invité n'ayant pas de compte PHPfrance

21 mai 2012, 18:44

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

ViPHP
ViPHP | 2577 Messages

21 mai 2012, 20:26

or die(mysql_error()) pour avoir une message d'erreur.

guim06
Invité n'ayant pas de compte PHPfrance

22 mai 2012, 09:35

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

guim06
Invité n'ayant pas de compte PHPfrance

22 mai 2012, 09:40

ç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.

ViPHP
ViPHP | 2577 Messages

22 mai 2012, 11:55

Le critère de tri que tu as mis est jos_sobi2_item.itemid. Affiche sa valeur pour juger du "désordre".

guim06
Invité n'ayant pas de compte PHPfrance

22 mai 2012, 15:30

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> ") ; } ?>