pb de requete

ricardo
Invité n'ayant pas de compte PHPfrance

23 mai 2005, 20:11

Bonsoir,

Voila mon probleme , je possede trois tables :

- login avec 4 champs : id - nomutilisateur - motpasse - email
- annonce avec 8 champs : IDlogin - email - choix - annonce - lieu - telephone - date saisie - id utilisateur
- choix avec 2 champs : id - theme

Je n'arrive pas à exécuter la requete me permettant d'afficher une liste d'annonces par choix (theme)

$reponse="SELECT id_utilisateur FROM annonce WHERE choix = '$theme'"; 
   			 $result=mysql_query($reponse); 
   			 list($id_utilisateur) = mysql_fetch_row($result);

$query_annonce="SELECT * FROM annonce,login WHERE choix='$theme' || id_utilisateur = '$id_utilisateur'";
$result_annonce=mysql_query($query_annonce);

while($val_annonce=mysql_fetch_array($result_annonce))
Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mai 2005, 20:16

ça fait quoi ? une erreur SQL ?

précise le problème

Mammouth du PHP | 19672 Messages

23 mai 2005, 20:20

Si je me fie à la liste des champs que tu montres avant le script, tu as une erreur en cherchant dans un champ inexistant
$query_annonce="SELECT * FROM annonce,login WHERE choix='$theme' OR id_utilisateur = '$id_utilisateur'"; 
devrait être:
$query_annonce="SELECT * FROM annonce,login WHERE choix='$theme' OR login.id = '$id_utilisateur'"; 
Note, j'ai aussi remplacé le "||" par "OR", mais c'est une question de préférence personnelle, je trouve ça plus "parlant"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mai 2005, 20:22

il y a un champ id_utilisateur dans sa table annonce

ricardo
Invité n'ayant pas de compte PHPfrance

23 mai 2005, 20:31

non aucune erreur,

J'affiche les annonces par theme mais chaque utilisateur a poster la meme annonce.

Une annonce se repete pour chaque utilisateur.

Voila le fct actuel.

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mai 2005, 20:44

si tu veux faire ça :
Je n'arrive pas à exécuter la requete me permettant d'afficher une liste d'annonces par choix (theme)
pourquoi teste-tu alors l'utilisateur dans ta requête ?

ceci devrait suffire
SELECT * FROM annonce,login WHERE choix='$theme'

Mammouth du PHP | 19672 Messages

23 mai 2005, 20:52

Ok pour id_utilisateur.

Ceci dit, tu fais une requête vers deux tables... sans faire de jointure entre les deux: ça doit perturber pas mal mysql: tu n'as l'air d'avoir aucune clé étrangère nulle part, ça n'aide pas non plus...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ricardo
Invité n'ayant pas de compte PHPfrance

23 mai 2005, 21:02

Je teste le nom utilisateur car je l'affiche.

Pour ma clé etrangere je sais pas trop comment m'y prendre

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mai 2005, 21:09

si tu l'affiches, tu dois le sélectionner (ce que tu fais avec le *), tu n'es pas obligé de le tester

si tu veux juste avoir toutes les annonces correspondant à un thème donné, c'est le thème que tu as besoin de tester

j'avoue que je ne comprend pas quel est ton problème précisèment

Mammouth du PHP | 19672 Messages

23 mai 2005, 21:19

Pour ma clé etrangere je sais pas trop comment m'y prendre
Ok, alors avant d'aller plus loin, dis moi qu'est-ce que tu comprends des clés étrangères : selon ta réponse, je ferai varier le degré de détail dans les explications
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mai 2005, 21:22

pourquoi tu lui parles de clé étrangère ? apparament ses tables sont liées entre elles alors je ne vois pas ce qui te gêne...

ce serait mieux de savoir plus exactement quel est le problème avant de se lancer dans un cours d'analyse

ricardo
Invité n'ayant pas de compte PHPfrance

23 mai 2005, 21:34

En faite le nom d'utilisateur est dans ma table login et la je fais une requete sur la table annonce ou se trouve les themes at les différent champs de mes annonces.

Quand j'affiche mes annonces par theme je veux également afficher le nom d'utilisateur qui a saisie l'annonce, pour faire le lien j'ai le champs id_utilisateur, mais je vois pas comment l'exploiter ?


Merci

Mammouth du PHP | 19672 Messages

23 mai 2005, 21:43

pourquoi tu lui parles de clé étrangère ? apparament ses tables sont liées entre elles alors je ne vois pas ce qui te gêne...

ce serait mieux de savoir plus exactement quel est le problème avant de se lancer dans un cours d'analyse
Précisément pour lui faciliter la vie: si ce concept n'est qu'un vague halo dans la brume, il va s'enquiquiner à cent sous de l'heure pour faire marcher son truc alors que la solution est simple, mais quand on ne la connait pas, ce n'est pas évident de la découvrir tout seul.

Le principe ricardo, c'est qu'une table A a une clé primaire et une table B, outre sa clé primaire, a une clé étrangère qui n'est autre que la clé primaire de la table A. Dans la pratique, ça veut dire qu'une ligne de la table A peut correspondre à 0 ou plusieurs lign(s) de la table B, mais qu'une ligne de la table B ne peut correspondre qu'à une et une seule ligne de la table A. Ça va jusque là ?

à partir de là, quand tu veux un résultat à partir des deux tables, tu dois faire une requête avec une jointure.: ça va ressembler à quelque chose comme ça :

Code : Tout sélectionner

SELECT champ1, champ2,... champn FROM table_a, table_b WHERE table_a.id = table_b.id_A
En français, ça donne: Je cherche les valeurs des champs 1, 2,...n des tables A et B à condition que la clé primaire de la table A corresponde à la clé étrangère dans la table B. Les champs recherchés proviennent des deux tables et si deux champs ont le même nom, on les préxixe avec le nom de la table et un point (table.champ)

Dis moi si tu captes pas tout :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mai 2005, 21:44

ok c'est plus clair

là en fait tu faisais un test sur id_utilisateur de façon à ne sélectionner que les annonces d'un certain utilisateur

ce que tu veux toi c'est récupèrer le nom (dans login), qui correspond à l'identifiant de l'utilisateur qui a posté telle ou telle annonce

il faut donc lier ces tables dans ta conditions

Code : Tout sélectionner

SELECT IDlogin, email, choix, annonce, lieu, telephone, date saisie, id utilisateur, nomutilisateur FROM annonce, login WHERE choix='$theme' AND annonce.id_utilisateur = login.id_utilisateur
c'est là qu'on vient au clés étrangères dont te parlait Cyrano

dans la table "login" : id_utilisateur est la clé primaire, ce qui identifie un utilisateur
dans la table "annonce" : id_utilisateur est une clé étrangère, elle fait référence à la clé primaire de "login"

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 mai 2005, 21:46

bon et bien je te laisse, ça ne sert à rien que je poste dans le vent