Liaison entre 2 tables SQL

Fermé
mixa38 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 21 novembre 2007 - 21 nov. 2007 à 10:04
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 - 21 nov. 2007 à 14:00
Bonjour tout le monde,

Depuis le temps que je consulte de forum de CCM, je me lance dans une question qui me turlupine !
Je bricole avec PHP/MYSQL.

J'ai 2 tables SQL, soit la table commentaires et la table membre.

--> http://images2.hiboox.com/images/4707/cszvapsb.jpg
--> http://images2.hiboox.com/images/4707/2taend7z.jpg

commentaires (id, id_sortie, auteur_id, date, com)
membre (id, prenom)

Ma requète est simple, mais je n'y arrive pas :(
Je souhaite afficher tout les commentaires (com) WHERE id_sortie = 1.

Les commentaires s'affichent avec un auteur, la date, et le commentaire à proprement parlé.
Evidemment, dans la table commentaires, il n'y a que auteur_id, et pas le prenom de l'auteur.
Le prénom de l'auteur est stocké dans la table membre.

Lorsque je fais un INNER JOIN entre commentaires et membre, avec comme clé auteur_id, j'ai uniquement les messages de auteur_id qui s'affichent, et non les messages WHERE id_sortie = 1.

select id, auteur_id, date, com, prenom FROM commentaires WHERE id_sortie LIKE '1' INNER JOIN membre ON commentaires.auteur_id = membre.id ORDER BY id ASC

J'espère avoir été compréhensible !

Merci de votre aide pour m'aiguiller sur le bon chemin !

Mixa !
A voir également:

8 réponses

ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 10:14
Bonjour,

Si la relation entre tes 2 tables est commentaires commentaires.auteur_id = membre.id, ta requete devrait ressembler à ceci :
SELECT c.id, auteur_id, date, com, prenom 
FROM   commentaires c, membres m
WHERE id_sortie LIKE '1'  and c.auteur_id = m.id 
ORDER BY c.id ASC
3
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 11:29
Cette requete renvoie tt les enregistrements qui ont une correspondance entre commentaires et membre

SELECT c.id, auteur_id, date, com, prenom 
FROM   commentaires c, membres m
WHERE and c.auteur_id = m.id
ORDER BY c.id ASC


"alors il faut faire l'équivalance avec la table membre pour retrouver le prénom de cet id ... "

SELECT id as VarPHP2
FROM   membres
WHERE prenom = VarPHP


VarPHP est la variable qui stockera le prenom saisi sur ta page
Si ta requete te ramene quelque chose c'est que l'utilisateur est enregistré.


Ensuite, tu recupéres l'enregistrement adequat :

SELECT c.id, auteur_id, date, com, prenom
FROM   commentaires c, membres m
WHERE c.auteur_id = m.id
c.auteur_id = VarPHP2
ORDER BY c.id ASC



Sinon tu as ceci :

SELECT c.id, auteur_id, date, com, prenom
FROM   commentaires c, membres m
WHERE c.auteur_id = m.id
c.auteur_id = (SELECT id FROM membre WHERE prenom = VarPHP)
ORDER BY c.id ASC


Je te laisse le soin de coder en PHP, ce n'est pas trop mon fort ;p
1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2007 à 12:06
Il y a deux sources possibles de recherche pour avoir les même infos: il y a soit un id, soit un nom d'utilisateur, je pense qu'un "WHERE c.auteur_id = m.id Or
c.auteur_id = (SELECT id FROM membre WHERE prenom = VarPHP)"
doit le faire (vérifier que la syntaxe du "Or" en MySql).

,o)

Polux
1
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 13:32
lol ...

je sais pas pourquoi, mais j'aurais mis un AND vu que c'est une recherche par id :p
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 13:34
encore mieux :

SELECT c.id, auteur_id, date, com, prenom
FROM   commentaires c, membres m
WHERE c.auteur_id = (SELECT id FROM membre WHERE prenom = VarPHP)
ORDER BY c.id ASC


;p
0
mixa38 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 21 novembre 2007
21 nov. 2007 à 10:31
Merci pour ta réponse ShaBoo !

Ta requète fonctionne bien ... mais de la même manière que ma requète INNER JOIN citée ci-dessus.
C'est à dire que le résultat affiché est uniquement les lignes WHERE c.auteur_id = m.id sans les lignes WHERE id_sortie LIKE '1'.
Mais moi j'aimerais bien les 2 !

RQ = commentaires.auteur_id n'a pas forcément d'équivalence dans auteur.id

Merci pour votre aide !

Mixa !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2007 à 10:39
Bonjour,

Pourquoi utiliser LIKE ??? Avec Where c.auteur_id = m.id And id_sortie = 1, ça ne marche pas ?

;o)

polux
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 10:52
"RQ = commentaires.auteur_id n'a pas forcément d'équivalence dans auteur.id "

Tu veux dire membres.id !!!

Je reprend ta problématique, car il y a un truc que je pige pas :

"Je souhaite afficher tout les commentaires (com) WHERE id_sortie = 1."

SELECT id, auteur_id, date, com
FROM   commentaires
WHERE id_sortie = '1'


(merci Polux ;p)


"Les commentaires s'affichent avec un auteur, la date, et le commentaire à proprement parlé.
Evidemment, dans la table commentaires, il n'y a que auteur_id, et pas le prenom de l'auteur.
Le prénom de l'auteur est stocké dans la table membre."


"RQ = commentaires.auteur_id n'a pas forcément d'équivalence dans auteur.id"

Et c'est là que le bat blesse, car il y a de la contradiction dans ce que tu veux !!!
0
mixa38 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 21 novembre 2007
21 nov. 2007 à 11:08
En effet, je voulais dire membre.id :oops: (merci ShaBoo pour ton oeil attentif)

J'avais zappé une info, encore une fois :oops: ...
Je reprends depuis le début de ma problèmatique.

Un user peut poster un commentaire soit en étant logué, donc il a un id (il ne rentre donc pas son nom au clavier), soit sans être logué, alors il n'a pas d'id, mais un prénom classique genre toto ou tutu qu'il saisi au clavier.
Donc dans mon champ commentaires.auteur_id, il y a soit un id, soit un nom d'utilisateur.

Lors de l'affichage des commentaires, si il y a un id dans commentaires.auteur_id, alors il faut faire l'équivalance avec la table membre pour retrouver le prénom de cet id ...
... Si il y a pas d'id, donc un prénom genre toto ou tutu, on passe à la suite.

(ps=j'ai une colonne dans la table commentaire qui me permet de valider (ou pas) que la ligne vient d'un user logué ou pas)

Merci
0
mixa38 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 21 novembre 2007
21 nov. 2007 à 12:26
Comment puis-je executer ces 2 requetes distinctes dans la même boucle ?
(boucle qui me permet d'affichere TOUT les commentaires d'une sortie donnée)

Merci !
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 14:00
euhhh ... c'est une autre problematique :

SELECT com 
FROM   commentaires
WHERE id_sortie = 'idSortieRecherché'


cette requete te donne tous les commentaires pour un id_sortie spécifique.

Mais j'ai l'impression que ce n'est pas ce que tu veux !!!
0