Moteur de recherche pour base mysql

Eléphant du PHP | 174 Messages

11 juil. 2005, 20:03

Code : Tout sélectionner

SELECT concours.nom, bandes.bande, modes.mode FROM concours, bandes, modes WHERE concours = bandes.id_concours AND bandes = modes.id_bande
reponse de la requete
#1054 - Champ 'concours' inconnu dans where clause

Mammouth du PHP | 19672 Messages

11 juil. 2005, 22:20

Normal, tu mets le nom de la table tout seul au lieu du champ dans ta clause WHERE. Essaye quelque chose comme:

Code : Tout sélectionner

SELECT concours.nom, bandes.bande, modes.mode FROM concours.id_concours = bandes.id_concours AND bandes.id_bande = modes.id_bande
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 174 Messages

11 juil. 2005, 22:39

Pourquoi tu as enlever le where ? Ok pour l'oublie

j'ai cette erreur :
#1064 - Erreur de syntaxe pr�s de '.id_concours
AND bandes.id_bande=modes.id_bande LIMIT 0, 30' � la ligne 2
Modifié en dernier par elminio le 11 juil. 2005, 22:44, modifié 2 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 juil. 2005, 22:42

Cyrano a lui aussi le copier/coller hâtif, et il a coupé des morceaux

il manque le WHERE : reprend ta requête et corrige suivant sa remarque ;)

Eléphant du PHP | 174 Messages

11 juil. 2005, 22:55

ça ne fonctionne pas, pourtant j'ai suivi sont exemple :

Code : Tout sélectionner

SELECT concours.nom, bandes.bande, modes.mode FROM concours, bandes, modes WHERE concours.id_concours = bandes.id_concours AND bandes.id_bande = modes.id_bande
#1054 - Champ 'bandes.id_concours' inconnu dans where clause

Par contre j'ai essayé ce code est ça fonctionne :

Code : Tout sélectionner

SELECT concours.nom, bandes.bande, modes.mode FROM concours, bandes, modes WHERE concours.id_concours = bandes.id_bande AND bandes.id_bande = modes.id_mode
Puis je ajouté la close LIKE dans cette requete ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 juil. 2005, 23:30

même si on a plus ou moins suivi ton problème, Cyrano et moi ne connaissons pas ta structure par coeur
donc il s'est planté sur un champ c'est normal, tu peux le voir avec ta première erreur

mais regarde ta deuxième requête, ton code fonctionne peut-être mais ne veut rien dire :

Code : Tout sélectionner

SELECT concours.nom, bandes.bande, modes.mode FROM concours, bandes, modes WHERE concours.id_concours = bandes.id_bande AND bandes.id_bande = modes.id_mode
tu testes des égalités sur des champs qui n'ont rien à voir entre eux !
un id_concours sera peut-être égal à un id_bande, mais est-ce que ça veut dire quelque chose : non

repars de cet exemple qui devrait marcher, et fais attention à être rigoureux, à utiliser les bons champs, procède par étape

Code : Tout sélectionner

SELECT id_concours, nom, mode FROM concours c, concours_mode c_m, modes m WHERE c.id_concours = c_m.id_concours AND c_m.id_mode = m.id_mode
cette requête lie un concours avec le libellé du mode, tu peux essayer d'y ajouter une condition pour sélectionner uniquement certains libellés de mode, avec ton LIKE

bon courage ;)

Mammouth du PHP | 19672 Messages

11 juil. 2005, 23:58

Puis je ajouté la close LIKE dans cette requete ?
Tu pourrais avoir 200 clauses supplémentaires si tu veux : chaque nouvelle clause rétrécit le champ de recherche et le résultat sera d'autant plus rapide que tes colonnes sont correctement indexées.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 174 Messages

12 juil. 2005, 10:19

j'ai fais plusieurs test et rien
en fonction de ma table relationnel et rien
http://www.f4bph.com/relationelfinal.JPG
et en fonction de ton exemple : (pas d'erreur mais rien au bout) :cry:

Code : Tout sélectionner

SELECT c.id_concours, c.nom, c.date, b.bande, b.id_bande FROM concours c, bandes b, concours_bande c_b WHERE c.id_concours = c_b.id_concours AND c_b.id_bande = b.id_bande

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 juil. 2005, 10:25

et tu es sûr que des enregistrements vérifient les conditions

fais un export de ta table (structure + données) et envoie la moi

gl_AT_ouckileou_POINT_net

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 juil. 2005, 10:53

dans ce que tu m'as donné la table "concours_bande" est vide

impossible donc de relier "concours" et "bande" via celle-ci

quand tu fais une insertion dans concours, il faut penser à renseigner les relations "concours_bande" et "concours_mode"

Eléphant du PHP | 174 Messages

12 juil. 2005, 11:31

Peux tu corriger les erreurs de ma base :oops:
comme ça je pourrais comparé mes erreurs. :wink:
si tu es ok biensur.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 juil. 2005, 11:38

ben ce ne sont pas vraiment des erreurs

il y a juste que si tu as un concours n°1, et que tu veux lui attribuer le mode n°3, il te faut cette ligne dans concours_mode

Code : Tout sélectionner

id_concours | id_mode 1 | 3
tout simplement

Eléphant du PHP | 174 Messages

12 juil. 2005, 11:47

pour moi normalement id_concours doit être = à id_mode
par conséquence :

Code : Tout sélectionner

id_concours | id_mode 1 | 1 OK 2 | 2 OK 3 | 3 OK 4 | 1 NO
Il y a une chose que je comprend pas pourquoi faire correspondre
1 et 3 de ton exemple.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 juil. 2005, 11:54

c'est que tu n'as pas compris le système de la relation alors

dans la table "concours" => id_concours : numéro unique permettant d'identifier un concours
dans la table "modes" => id_mode : numéro unique permettant d'identifier un mode

quand je dis "unique", c'est dans leur table respective bien sûr

Pourquoi un numéro unique : c'est plus parlant avec des personnes
si tu as deux enregistrements "Jean Dupond" et "Michel Dupond", ils ont le même nom, il faut les identifier => identifiant = clé primaire

la table "concours_mode" sert donc à relier un concours et un mode

si tu n'avais qu'un et un seul mode pour chaque concours, tu aurais pu mettre un champ "id_mode" dans ta table concours
mais il me semble que tu souhaitais pouvoir associer plusieurs modes à un concours
donc : table intermédiaire, appelée relation, pour pouvoir créer plusieurs lignes/couples id_concours/id_mode

tu comprends le système ?

je t'invite maintenant à regarder quelques cours, sinon tu ne vas pas t'en sortir :)

regarde à cette adresse par exemple :
http://sgbd.developpez.com/cours/

notamment celui-ci : Conception d'une base de données dans la catégorie " Généralités sur les SGBD" (la première)

Eléphant du PHP | 174 Messages

12 juil. 2005, 12:16

Comment tu fais pour renseigner les relations "concours_bande" et "concours_mode" ?
pour ton explication je l'ai bien compris c'est plutôt la mise en pratique qui est plus complexe.
Par contre je vois très bien que mes champs ne sont pas renseigné moi je pensais qu'on ne pouvait pas y accéder (contenu), et Ok pour les clé unique.