INNER JOIN syntaxe

Eléphant du PHP | 172 Messages

20 janv. 2006, 17:52

Salut à tous,

J'ai de nouveau un petit problème cette fois avec une requête, je pense faire pourtant comme indiqué sur http://www.mysql.com/ mais j'ai toujours un message d'erreur, qui m'indique que la syntaxe de ma requête est incorrecte.

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\projet\menu.php on line 14

J'ai essayé de multiples façons, mais je n'y arrive pas :cry:

Voici la requête :
$req2 = mysql_query('SELECT nom FROM sous_menu,menu WHERE sous_menu.menu = menu.nom');
while($sous_menu = mysql_fetch_array($req2));
{
		echo $sous_menu['nom'];
}
Ce que je traduirais en français de ce que ça doit faire :

Sélection du champ 'nom' de la table 'sous_menu' où le champ 'menu' de la table 'sous_menu' est égal au champ 'nom' de la table menu.

Où est mon erreur ?

Car là je rame encore :?

Mammouth du PHP | 568 Messages

20 janv. 2006, 18:01

Vu comme ça, syntaxiquement, y a pas de bug...

Maintenant, peux y avoir d'autre raison derrière (champ mal ortographié, champ manquant,...). Pour plus d'infos, exécutes ta requètes dans phpmyadmin... Il devrais aussi te renvoyer une erreur, mais avec plus d'informations...

De plus, ton champ menu dans la table sous_menu contient bien des noms de menu que l'on retrouve dans le champ nom de la table menu ?
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 172 Messages

20 janv. 2006, 18:08

Merci, je vais essayer de le faire dans phpmyadmin si je trouve comment on fait :mrgreen:

Ah oui, j'ai oublié aussi de préciser le messge de mysql_error(), il me dit :

Champ: 'nom' dans field list est ambigu

Je comprends pas trop ce qu'il entend par ambigu :?

Mammouth du PHP | 568 Messages

20 janv. 2006, 18:13

Bon bin laisse tomber pour phpmyadmin alors... C'est le message que je voulais :p

Donc le soucis viens de "SELECT nom"... Tu dois avoir un champs nom dans tes 2 tables, donc il ne sais pas lequel prendre.. Précise lui lequel tu veux... menu.nom ou sous-menu.nom...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 172 Messages

20 janv. 2006, 18:32

Oui, c'est ça, il y a un champ nom dans chaque table, t'es trop fort !!

Je n'ai plus de message d'erreur, mais l'echo n'affiche rien, alors qu'il y a bel et bien un champ 'nom' dans 'menu' qui s'appelle 'LES FORMES' et que dans ma table 'sous_menu' il y a 5 champs 'menu' qui ont pour nom 'LES FORMES'.

J'ai transformé comme ça :
mysql_query('SELECT sous_menu.nom FROM sous_menu,menu WHERE sous_menu.menu = menu.nom')
C'est bon ?

Mammouth du PHP | 568 Messages

20 janv. 2006, 18:46

Bin sur le principe, ouais ça ne semble pas poser de problème... Maintenant, je connais pas tout... Peux-être devrais tu quand même exécuter ta requête dans phpmyadmin (tu cliques sur "sql") et tu vois si ça te donnes ou non tes résultats... Si non, il faudrait que tu regardes si par hasard ton "LES FORMES" n'a pas une petite différence entre les 2 tables (genre un espace en plus)...

Cependant, c'est maladroit de marcher de cette façon...

Je suppose que ta table menu se présente comme ça :
id | nom | ...

et ta table sous_menu :
id | nom | ... | menu

Et dans ce cas, ton champ menu devrais plutôt être lié à l'id de la table menu...
ex menu :
id : 1
nom : "LES FORMES"
...

et ex. sous_menu :
id : 1
nom : "RECTANGLE" ?
...
menu : 1 (id de "LES FORMES" dans menu)
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 172 Messages

20 janv. 2006, 19:39

Je comprends rien :cry: , dans PhpMyAdmin, ma requête s'effectue bien, j'obtiens ceci :


Image

Par contre dans ma page, je n'ai strictement rien qui s'affiche ...

J'ai tout essayé, même en changeant tous les noms de mes champs et de mes variables pour qu'il n'y ai pas de conflit, rien à y faire.

Le code, mais j'ai juste changé comme tu m'as dis :
$req2 = mysql_query('SELECT * FROM sous_menu,menu WHERE sous_menu.id = menu.id') or die (mysql_error());
while($sous_menu = mysql_fetch_array($req2));
{
		echo $sous_menu['id'] . "<br />";
		echo $sous_menu['menu'] . "<br />";
		echo $sous_menu['nom'] . "<br />";
		if(!isset($sous_menu['id']))
		{
				echo 'absent';
		}
}
Bien entendu, ça m'affiche absent, et je vois pas pourquoi :(

Mammouth du PHP | 568 Messages

20 janv. 2006, 20:25

Non non... Tu m'as mal compris ;)

Ce que je te disais, c'est que le champ dans la table sous_menu te permettant de savoir à quel menu appartient le sous menu ne devrais pas être du type texte... Donc pas mettre "les formes", mais le numéro du menu... donc ici 2...

bon, sinon, test dans phpmyadmin ma requête suivante :
SELECT sous_menu.nom FROM sous_menu,menu WHERE sous_menu.menu = menu.nom

Il faut voir ce que ça va te donner...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 172 Messages

20 janv. 2006, 20:56

Ah ok, j'avais mal interprété ton explication.

Je viens de tester ta requête, et le résultat me donne les noms de sous_menu, c'est à dire cercles, rectangles, etc...

Mais ça ne fonctionnait pas dans ma page.

Alors, j'ai essayé un truc :
$sous_menu_x = mysql_fetch_array($req2);
echo $sous_menu_x[0];
Et là ça m'affichait bien la première valeur de la table, donc la requête est bonne.

Le problème se situait au niveau de ma boucle, j'ai vraiment pas fait attention, j'ai mis un point-virgule à la fin du while, je vais aller me pendre ](*,)

Ca plus de 2 heures que je me casse la tête pour un petit point-virgule, j'ai honte ... :oops:

En tout cas merci du temps que tu as consacré à vouloir m'aider.

Merci :wink:

Et désolé.

Mammouth du PHP | 568 Messages

21 janv. 2006, 02:12

Erf ! Pas mieux ! J'avais pas vu non plus :?

Le genre de petit détail qui change tout...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007