JeuWeb - Crée ton jeu par navigateur
Problème de jointure n:n - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème de jointure n:n (/showthread.php?tid=4631)



Problème de jointure n:n - My Hotel - 09-03-2010

Salut à tous

Bon, étant une quiche en SQL, je fais appel à vous après des recherches plutôt infructueuses.
Comment gérer de la meilleure manière possible mon problème?
Voici mes tables (je met que l'essentiel)
pm_topics : id|master_id (liste des conversations des MP, master_id étant l'id du joueur qui a initié la conversation)
pm_topics_users : topic_id|user_id (table de relation car un sujet peut avoir plusieurs utilisateurs, et un utilisateur peut participer à plusieurs sujets)
users : id|pseudo

Donc en gros, j'aimerais afficher une liste des sujets, avec à chaque fois les pseudo des différents participants, et du maître du sujet.

J'ai pas réussi avec les jointures, j'arrive seulement à avoir 1 membre par sujet. Les sous-requêtes, je galère un peu aussi... Sad

Voilà, j'ai tout dit, j'espère que vous trouverez une solution plus optimisée que moi, parce que là j'arrive rien à faire sauf des requêtes dans un while...Pas super au niveau optimisation Smile

Merci, bye!


RE: Problème de jointure n:n - pascal - 09-03-2010

Peux-tu montrer tes requêtes ?

A+

Pascal


RE: Problème de jointure n:n - My Hotel - 09-03-2010

Eh bien, ma dernière tentative était celle-ci (les précédentes ont été écrasées):
SELECT *
FROM pm_topics LEFT JOIN pm_topics_users
ON pm_topics.id = pm_topics_users.topic_id
LEFT JOIN users
ON pm_topics_users.user_id=users.id

Le * sera remplacé par le nom des champs, quand j'aurais la bonne requête. Et ça ne me renvoie que le pseudo du premier participant à la conversation, et non pas tous les pseudos qui participent à chaque conversation.

J'espère que c'est clair Wink


RE: Problème de jointure n:n - Zamentur - 09-03-2010

Code PHP :
<?php 
SELECT t
.id as topic_id, m.pseudo AS master, u.pseudo AS user
FROM
`pm_topics` as t
INNER JOIN users
as m ON (t.master_id=m.id)
LEFT JOIN pm_topics_users AS r ON (r.topic_id=t.id)
INNER JOIN users as u ON (r.user_id=m.id)

Mais bon j'aurais plutôt tendance à décomposer:
Code PHP :
<?php 
SELECT t
.id as topic_id, u.pseudo AS user
FROM
`pm_topics` as t
LEFT JOIN pm_topics_users
AS r ON (r.topic_id=t.id)
INNER JOIN users as u ON (r.user_id=m.id)

Code PHP :
<?php 
SELECT t
.id as topic_id, m.pseudo AS master
FROM
`pm_topics` as t
INNER JOIN users
as m ON (t.master_id=m.id)



RE: Problème de jointure n:n - My Hotel - 10-03-2010

Merci beaucoup!

Bye