Rechercher : dans
Par :

Liaison entre 2 tables SQL

Dernière réponse le 21 nov 2007 à 14:00:44 mixa38, le 21 nov 2007 à 10:04:25 
 Signaler ce message aux modérateurs

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 !

Configuration: Windows XP
Firefox 2.0.0.9 / IE6

Meilleures réponses pour « Liaison entre 2 tables SQL » dans :
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
SQL - Modification de table VoirModification de table Il est possible de supprimer une table grâce à la clause DROP, il existe aussi des commandes moins extrêmes permettant L'ajout de colonnes La modification de colonnes La suppression de colonnes Enfin, il est possible...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...

1

ShaBoo, le 21 nov 2007 à 10:14:09
  • +2

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

Répondre à ShaBoo

2

mixa38, le 21 nov 2007 à 10:31:42

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 !

Répondre à mixa38

3

Polux31, le 21 nov 2007 à 10:39:05

Bonjour,

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

;o)

polux

Répondre à Polux31

4

ShaBoo, le 21 nov 2007 à 10:52:46

"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 !!!

Répondre à ShaBoo

5

mixa38, le 21 nov 2007 à 11:08:51

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

Répondre à mixa38

6

ShaBoo, le 21 nov 2007 à 11:29:57

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

Répondre à ShaBoo

7

Polux31, le 21 nov 2007 à 12:06:33
  • +1

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

Répondre à Polux31

9

ShaBoo, le 21 nov 2007 à 13:32:45

Lol ...

je sais pas pourquoi, mais j'aurais mis un AND vu que c'est une recherche par id :p

Répondre à ShaBoo

10

ShaBoo, le 21 nov 2007 à 13:34:37

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

Répondre à ShaBoo

8

mixa38, le 21 nov 2007 à 12:26:44

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 !

Répondre à mixa38

11

 ShaBoo, le 21 nov 2007 à 14:00:44

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 !!!

Répondre à ShaBoo