Page 1 sur 3
Je ne comprend pas la requête
Posté : 20 déc. 2005, 17:37
par stefane321
Bonjour,
Je suis à faire deux listes déroulantes lié en suivant le tutoriel suivant:
http://www.phpfrance.com/forums/voir_sujet-4562.php
Version JAVASCRIPT.
Maintenant, je veux l'adapter à ma BD mais je ne comprend pas leur requête sql:
Code : Tout sélectionner
$sql = "SELECT id_departement AS idd, departement AS dept, region.id_region AS idr, region ".
"FROM departement, region ".
"WHERE departement.id_region = region.id_region ".
"ORDER BY region.id_region;";
Voici mes tables vers lesquelles je dois adapter la requêête:
Code : Tout sélectionner
CREATE TABLE `categories_formations` (
`id` int(255) NOT NULL auto_increment,
`nom` varchar(255) NOT NULL default '',
`description` text NOT NULL,
`image` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
)
Code : Tout sélectionner
CREATE TABLE `sous_categories_formations` (
`id` int(255) NOT NULL auto_increment,
`nom` varchar(255) NOT NULL default '',
`categorie_id` int(255) NOT NULL default '0',
`description` text NOT NULL,
`image` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
)
Dans la requête du tutoriel je ne comprend les "nom_de_champs as une_variable" et les "nom_dune_table.nom_de_champs as une_variable"
En espérant que vous pourrez m'aider!
Merci!
Posté : 20 déc. 2005, 18:01
par Truc
Dans la requête du tutoriel je ne comprend les "nom_de_champs as une_variable" et les "nom_dune_table.nom_de_champs as une_variable"
Ce sont des alias, qui permettent de travailler avec des noms de champs plus courts (le plus souvent)
Ici on fera appel à "idd" et non plus à "id_departement"
Permet la liaison entre les 2 tables. on compare "id_region" de la table "departement" a celui de la table "region".
Code : Tout sélectionner
$sql = "SELECT sc.nom AS n, sc.id ".
"FROM categories_formations c , sous_categories_formations sc ".
"WHERE c.id_region = sc.categorie_id ".
"ORDER BY c.id;";
essaie déjà avec cette requete.
Warning: mysql_fetch_assoc():
Posté : 20 déc. 2005, 18:39
par stefane321
J'obtiens cette erreur:
Code : Tout sélectionner
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\communauweb\web\liens_educatifs\test.php on line 43
J'avais essayé la modification suivante qui me donne la même erreur:
Code : Tout sélectionner
$sql = "SELECT id AS idd, nom AS dept, categories_formations.id AS idr, categories_formations ".
"FROM sous_categories_formations, categories_formations ".
"WHERE sous_categories_formations.categorie_id = categories_formations.id ".
"ORDER BY categories_formations.id;";
L'avant dernier ; dans
sert à quoi svp?
Merci!
Posté : 20 déc. 2005, 18:56
par Cyrano
Le ORDER BY sert à classer les résultats de la requête: ici, on va classer en ordre croissant d'après la colonnne id de la table "categorie_formation".
Quand tu as un problème du genre de celui mentionné dans ton message d'erreur, fais afficher ta requête (avec echo($sql); par exemple) : copie la requête affichée et teste là directement sur ta base via phpMyAdmin pour vérifier qu'elle te retourne un résultat ou une erreur. 9 fois sur 10, il y a une erreur de syntaxe et la requête retourne FALSE, ce que faisant, ça génère une erreur avec les instructions suivantes basées sur un résultat normal de requête.
Re:
Posté : 20 déc. 2005, 21:08
par stefane321
Bon,
J'ai fais un echo sur ma requete et j'ai collé le résultat dans sql et voici l'erreur reporté par MYSQL:
J'ai donc enelé le code en rapport avec ce champ pour me rendre compte que tous mes requêtes sur champs me donne cette erreur.
De plus, à quoi sert
categories_formations tout juste avant le FROM?
Merci!
Posté : 20 déc. 2005, 22:53
par Cyrano
Un message indiquand un champ ambigu, ça signifie que tu fais une requête sur plus d'une table contenant le même nom de champ. C'est pour cette raison qu'il faut préfixer le nom du champ avec le nom de la table correspondante.
Ce qu'il y a entre "SELECT" et "FROM", ce sont les colonnes que tu veux récupérer; Ce qui suit le FORM, ce sont les tables dans lesquelles tu effectues la recherche.
Posté : 21 déc. 2005, 10:54
par Min's
J'admets facilement que les requètes complexes SQL c'est pas évident sans vraiment avoir passé de longues heures devant...
Vais ptet voir pour écrire un tit qqch pour ici moi...

Posté : 21 déc. 2005, 11:03
par Cyrano
Vais ptet voir pour écrire un tit qqch pour ici moi...

Si tu veux nous faire un petit tuto, soumets ça à un ViPhP, un modo ou un admin et on mettra ça volontiers dans la FAQ

Posté : 21 déc. 2005, 11:10
par Min's
Vais ptet voir pour écrire un tit qqch pour ici moi...

Si tu veux nous faire un petit tuto, soumets ça à un ViPhP, un modo ou un admin et on mettra ça volontiers dans la FAQ

Sans soucis

Merci
Posté : 21 déc. 2005, 16:25
par stefane321
Merci cher ami programmeur!
Maintenant ma requête fonctionne.
Mais là j'ai nouveau problème.
Je me sert du tutoriel
http://www.phpfrance.com/forums/voir_sujet-4562.php
Version JAVASCRIPT pour gérer un annuaire de liens Web.
J'ai des catégories qui ont des sous-catégories et des catégories qui non pas de sous-catégories.
Actuellement, le code de ce tutoriel n'affiche dans la premi``ere liste déroulante que les catégories qui ont une sous-catégorie.
Si j'enlève
Code : Tout sélectionner
WHERE sous_categories_formations.categorie_id = categories_formations.id toutes les catégories sont affiché mais aussi toutes les sous-catégories le sont dans la deuxième listes mais sans distinction de leur catégorie d'attache.
Pouvez-vous m'aider encore svp?
Merci!
Posté : 21 déc. 2005, 16:52
par Cyrano
Dans ce cas, il faudra modifier la requête et faire une jointure gauche : fais voir ta requête actuelle complete qu'on la modifie.
voici ma requête
Posté : 21 déc. 2005, 17:06
par stefane321
Voici ma requête:
Code : Tout sélectionner
$sql = "SELECT sous_categories_formations.id AS idd, sous_categories_formations.nom AS dept, categories_formations.id AS idr, categories_formations.nom FROM sous_categories_formations, categories_formations WHERE sous_categories_formations.categorie_id = categories_formations.id ORDER BY categories_formations.id";
Merci!
Posté : 21 déc. 2005, 17:09
par Cyrano
OK, essaye comme ceci:
Code : Tout sélectionner
SELECT sous_categories_formations.id AS idd,
sous_categories_formations.nom AS dept,
categories_formations.id AS idr,
categories_formations.nom
FROM sous_categories_formations
LEFT JOIN categories_formations
ON sous_categories_formations.categorie_id = categories_formations.id
ORDER BY categories_formations.id;
Teste là d'abord dans phpMyAdmin pour vérifier ce qui en ressort, si tout est correct, il re restera à la coller en lieu et place de l'ancienne dans ton code PHP.
Fonctionne pas
Posté : 21 déc. 2005, 17:20
par stefane321
Ça ne fonctionne pas.
J'ai le même résultat que précédemment.
Merci!
Posté : 21 déc. 2005, 17:25
par Cyrano
faudrait que j'aie la base ou à tout le moins les tables mentionnées dans la clause FROM de la requête pour faire les tests, je vois pas ce qui cloche...
