Bonjour Bonsoir,

Je suis entrais de travailler sur un forum mais je rencontre un petit prôbléme lors que je veux récupperais les commentaire poster sur le topic.

Donc j'ai 3 table la 1er qui stocke les info sur le membre la 2eme le topic et la 3eme qui stocke les commentaire du topic, j'ai fait une jointure en sql mais il m'affiche en deux foit choque commentaire.

code sql :

// selectinnez les message poster sur le topic.
$reqcomment = $bdd->query('SELECT commentaire_topic.*, membre.*, topic.* FROM commentaire_topic, membre, topic WHERE commentaire_topic.id_topic = topic.id_topic1');

et pour afficher les commentaire je fait un while :

$commentaire = $reqcomment->fetch()

si vous pouvez m'aider sa serais simpas de votre part merci.

15 réponses


Bonjour,
as-tu essayé avec des jointures de type LEFT JOIN ou INNER JOIN ?

JMERISE
Auteur

j'ai essayer un INSERT JOIN

Si tu as des doublons, tu peux regarder du coté de DISTINCT

JMERISE
Auteur

J'ai mis
"

DISTINCT

"
après le mot SELECT mais rien ne changer puis avec

Oracle

il m'affiche une erreur

JMERISE
Auteur

J'ai remarqué que en plus des doublons il affiche le même commentaire sur tous les topic.

tu peux mettre un GROUP BY sur l'id du commentaire

Ta table commentaire-topic est reliée à ta table topic mais ta table membre n'est reliée à rien, donc ça te fait un produit cartesien.
Il faut relier un commentaire au membre qui la posté.

Tu peux donner les structures de tes tables.
Mais je vois déjà 2 erreurs dans la requête SQL,
Déjà le jointure non explecite c'est mal, et là si je me trompe pas c'est du cross join donc multiplicateur, il faut du inner joint
si je réecrit ta requête comme il faudrat ça donne ça:

SELECT commentaire_topic.*, membre.*, topic.* 
FROM commentaire_topic
inner join topic  on commentaire_topic.id_topic=topic.id_topic1
inner join  membre on  ..... quoi?  manque la condition de jointure

jointure sql cours

JMERISE
Auteur

salut,
avec ce code il m'affiche chaque message une fois mais il me l'affiche sur tous les page même si je fait comme toi :

commentaire_topic.id_topic = topic.id_topic1

La requête est incomplete.
d'ou la question "Tu peux donner les structures de tes tables." ainsi ce que tu veux faire

JMERISE
Auteur

Voila ce que j'ai mis dans la partie incompléte mais il m'affiche t'oujour tous les commentaire:

commentaire_topic.id_user = membre.id

maintenant tu limites les resultats par un where topic.id_topic1= ton id de topic

JMERISE
Auteur

le id_topic1 est déja l'id de topic

C'est La PK de la table mais il à bien une valeur unique.
Là tu dis sur quel champ il fait la liaison (uniquement)

Je te donne un exemple avec juste une petite différence, mais qui change énormément le résultat

Exemple 1

Select  commentaire.*,user.* from commentaire
inner join user on commentaire.user_id=user.id
inner join topic on topic.id= commentaire.topic_id
where user.login="kadevland" and commentaire.titre="Cours SQL"

Je veux tous les commentaires de kadevland pour le topic dont le titre est Cours SQL

Exemple 2

Select  commentaire.*,user.* from commentaire
inner join user on commentaire.user_id=user.id
inner join topic on topic.id= commentaire.topic_id
where  commentaire.titre="Cours SQL"

Je veux tous les commentaires (avec les informations des auteurs) pour le topic dont le titre est Cours SQL

si tu précises pas "les limites" cad where c'est normal que tu es tous

IL faut pas confondre synification et valeur, c'est comme en POO la définition de la class et l'instance.