Aller au contenu

Sujets conseillés

Posté (modifié)

Bonjour à tous,

Je viens d'essayer une requête SQL d'un nouveau genre, je résiste pas à vous la faire admirer :

$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 " :fou: " ?

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:

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

Modifié par Boumbadaboum
Posté

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

Posté
le champ 'vue' de la table 'plat'= 1

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

$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 ?

Posté
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 :

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

$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 ;)

Posté

Faire une jointure, c'est important pour mysql :)

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

Posté (modifié)

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 :

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

donc?

Modifié par Boumbadaboum
Posté (modifié)

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 :D

Portekoi

EDIT : Preum's :D

Modifié par portekoi
Posté

$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 ;)

Posté (modifié)

Non ça fonctionne pas j'ai une erreur sql warning : mysql_fetch_array.

ma requête :

$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::wacko:

Modifié par Boumbadaboum
Posté (modifié)

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.

Modifié par Boumbadaboum
Posté (modifié)

L'argument limit est pas valide,il faut mettre LIMIT 0,1

:)

EDIT:"Pas lu la fin de ton poste" :D

Et je ne pense pas que le QI est grand chose avec le temps de programmation. :)

Modifié par snwoman49
Posté
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 :lol:

Posté

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 :)

Posté (modifié)

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. :fou:

Modifié par Boumbadaboum
Posté

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: j'vais prendre un bain ça ira mieux après.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...