Version complète: sur le forum Webmaster Hub : requête SQL
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Boumbadaboum
Bonjour à tous,
Je viens d'essayer une requête SQL d'un nouveau genre, je résiste pas à vous la faire admirer :

CODE
$plat="SELECT plat.* ,recette.libelle FROM plat,recette WHERE plat.libelle like '$nouveauPlat%' AND recette.vue=0 AND recette.libelle  like '$nouveauPlat%'  LIMIT 1"


qui à dit " IMSTP6.gif " ?
En plus ça fonctionne !
nan c'est pas vrai

Bon cela étant l'objectif est le suivant :

J'ai une table plat et une table cuisine.
J'essaie de récupérer tous les champs du tuple de la table 'plat' où le champ 'libelle' correspond à la variable $nouveauPlat et aussi le tuple de la table recette où le champ libelle correspond aussi à la variable $nouveauPlat.
En plus il ne faut récupérer les tuples de la table 'plat' et 'recette' que si le champ 'vue' de la table 'plat'= 1 (le tout LIMIT 1 dès fois que y'ai des tuples malins qui se dédoublent).

wacko.gif

Bon sans rire, je veux bien un coup de main là
Portekoi
Bonjour,

Quelle est la structure de tes tables?

Plat : ID /Nom
Recette : ID / Nom / Plat_id

?

As tu une clé étrangère dans ta table 'recette' qui correspondrait à un enregistrement de la table 'plat' ?


Portekoi
sarc
CITATION
le champ 'vue' de la table 'plat'= 1

Alors pourquoi dans ta requète tu as =0 ? Tu vas pas aller loin avec ça ! tongue.gif

CODE
$plat="SELECT DISTINCT plat.* ,recette.libelle FROM plat,recette WHERE plat.libelle like '%$nouveauPlat%' AND recette.vue=1 AND recette.libelle  = plat.libelle"


Ca te va pas ça ? Il te pose problème ?
Boumbadaboum
et bien les deux champs commun sont les champs 'libellé'.
Boumbadaboum
CODE
Ca te va pas ça ? Il te pose problème ?


J'essaie ta requête Sarc, je te dis le résultat dans 5-10 minutes wink.gif
sarc
CITATION
que si le champ 'vue' de la table 'plat'= 1

Ca c'est ce que tu aimerais avoir, et dans ta requète initiale tu marques :

CODE
recette.vue=0

Je comprend plus ce que tu veux, tu as mis une chose et son contraire !!

Donc ma dernière requète serait plutôt
CODE
$plat="SELECT DISTINCT plat.* ,recette.libelle FROM plat,recette WHERE plat.libelle like '%$nouveauPlat%' AND plat.vue=1 AND recette.libelle  = plat.libelle"

Si je suis ce que tu mets dans ton texte wink.gif
Portekoi
Faire une jointure, c'est important pour mysql smile.gif

Essaie d'optimiser la structure de ta table en ayant une clé 'numérique' dans chaque table dont 2 dans celle de recette. (ID et Plat_ID)

Ainsi tu pourras faie quelque chose comme :

"select recette.* from recette inner join plat on recette.plat_id = plat.id where recette.libelle = '".$mavar."' etc..."


Portekoi
Boumbadaboum
J'ai un problème bête la :

Comment je récupère dans le tableau des valeurs provenant de deux tables ?
je veux dire :

Je fais ma boucle while, comme d'habitude, puis je dis echo" $req[libelle]".
Mais là j'ai deux champs libellé provenant de deux tables.
Alors je viens d'essayer $req[plat.libelle]

mais j'obtiens :


CODE
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting'['


donc?
Portekoi
select recette.libelle as libelle1, plat.libelle as libelle2 etc..

$req["libelle1"] ou $req["libelle2"]

Mais comme ils sont égaux, tu peux en afficher qu'un biggrin.gif


Portekoi

EDIT : Preum's biggrin.gif
sarc
CODE
$plat="SELECT DISTINCT plat.* ,recette.libelle AS rec_libelle FROM plat,recette WHERE plat.libelle like '%$nouveauPlat%' AND plat.vue=1 AND recette.libelle  = plat.libelle"


Avec le AS, tu auras par la suite deux variables : $req[libelle] qui est celui de plat, et $req[rec_libelle] qui sera celui de recette wink.gif
Boumbadaboum
CODE
Mais comme ils sont égaux, tu peux en afficher qu'un

fais pas le malin lol
Boumbadaboum
Non ça fonctionne pas j'ai une erreur sql warning : mysql_fetch_array.

ma requête :


CODE
$validerNvComp="SELECT DISTINCT plat.* ,recette.libelleDef AS recette_libelleDef FROM plat,recette WHERE plat.libelle like '$variable%' AND plat.vue=0 AND plat.libelle=recette.libelle"


Donc je récupère deux tuples de deux tables différentes ayant le même contenu pour le champ libellé mais par contre pour la table recette je veux récupérer un champ qui n'est pas dans la table plat.
et j'utilise ça dans le tableau :
$res[recette_libelleDef]

blink.gif wacko.gif
Boumbadaboum
Bon j'ai essayé autre chose qui devrait fonctionner vu que c'est très simple pourtant ça marche pas :

je fais :
$req="SELECT plat FROM recette WHERE libelle like '$nouvelleRecette%' LIMIT 1"

Bon et bien ça ne m'affiche que les plat dont le libelle ne comporte ni accent (é par ex), ni mots composés ni rien, que des mots simple.

C'est n'importe quoi j'ai jamais vu ça.
En plus je programme depuis 7 heure du matin mon QI vient de tomber à 75.
La preuve je met un LIMIT 1 avec un mysql_fetch_array pour récuper les résultats alors qu'il y a qu'un résultat à récupérer et je ne sais plus comment l'afficher sans une boucle while.
snwoman49
L'argument limit est pas valide,il faut mettre LIMIT 0,1
smile.gif
EDIT:"Pas lu la fin de ton poste" biggrin.gif
Et je ne pense pas que le QI est grand chose avec le temps de programmation. smile.gif
Dan
CITATION(Boumbadaboum @ lundi 08 août 2005, 19h05)
En plus je programme depuis 7 heure du matin mon QI vient de tomber à 75.
*

Si ton QI descend sous ton indice de protection solaire il faut aller dormir à l'ombre laugh.gif
Boumbadaboum
ouais blush.gif

mais les champs avec accents ou composé s'affichent pas quand même.
Dan
Une question: tu ne serais pas en mysql 4.1.x avec des tables encodées en UTF-8 ?? Ca gène pas mal pour les accents smile.gif
Boumbadaboum
bouh la vilaine question

je suis chez ovh c'est tout ce que je sais lol
snwoman49
Dans une de tes pages tu faits phpinfo()
Boumbadaboum
oui j'ai pas bien trouvé dans phpinfo mais de toute façon c'est mysql 6 chez ovh je crois me souvenir.

Mais vraiment cette erreur je la comprend pas surtout que le problème ne se pose pas ailleur :

J'ai un select. Je fais un choix.

j'affiche divers champs d'une table en fonction de ce choix. ça fonctionne.
J'affiche un champ d'une autre table en fonction de ce même choix. ça fonctionne pas avec les accents et les mots composés.

N'importe quoi. IMSTP6.gif
snwoman49
Pour l'instant d'après ce que je me souviens on est à mysql 5
Boumbadaboum
bon bah je sais pas la version . Mais c'est pas la question puisque ça fonctionne bien pour un autre script.

Bon je m'énerve à force angry.gif j'vais prendre un bain ça ira mieux après.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.