Bonsoir,
Je me décide enfin à demander votre aide après plus d'une journée à passer à chercher une solution ou une aide à mon problème.
Je m'explique : je développe actuellement une application (PHP/MySQL) et souhaite extraire des données de plusieurs tables en une requête.
Voici un schéma de ma base de données avec les tables concernées :
Je souhaite créer un profil pour chaque membre. Sur celui-ci sera visible un historique de ses actions (un peu comme Facebook)
Afin de vous situer, une fiche peut être une vidéo ou un jeu.Profil de Jean :
"Jean a commenté cette fiche"
"Jean a noté cette fiche"
Etc...
En gros, avec l'id de mon membre, je peux obtenir toutes les fiches qu'il a noté, commenté, ajouté en favoris, rédigé, les parties qu'il a joué, mais aussi son statut et son humeur.
Je souhaite donc récupérer en une requête toutes les actions de mon membre, et limiter les résultats, car je pense que ce sera moins lourd que faire une requête pour chaque table, tout récupérer ensuite dans un tableau en PHP et le trier (et moins chiant faut l'avouer)
Ces actions seraient triées par date (d'où la présence des champs commençant par dt dans chaque table).
J'ai essayé d'utiliser les union, jointures, ai relu le cours de SQL sur les jointures et regroupement, mais rien n'a marché.
J'ai pensé aussi à créer une vue mais sans succès.
Malheureusement mes connaissances en SQL ne sont pas très poussées.
Quelques essais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 SELECT * FROM Favori fa, Partie p, Noter n, Commenter c, Membre m, Statut s, Afficher a, Humeur h WHERE m.id = fa.idMembre AND m.id = p.idMembre AND m.id = n.idMembre AND m.id = c.idMembre AND m.id = s.idMembre AND m.id = a.idMembre AND m.id = "1" ORDER BY ( SELECT dtFavori FROM Favori WHERE idMembre="1" UNION SELECT dtPartie FROM Partie WHERE idMembre="1" UNION SELECT dtNote FROM Noter WHERE idMembre="1" UNION SELECT dtCom FROM Commenter WHERE idMembre="1" UNION SELECT dtStatut FROM Statut WHERE idMembre="1" UNION SELECT dtHumeur FROM Afficher WHERE idMembre="1" )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT * FROM Favori f, Partie p, Noter n, Commenter c, Statut s, Afficher a WHERE f.idMembre = 1 OR p.idMembre = 1 OR n.idMembre = 1 OR c.idMembre = 1 OR s.idMembre = 1 OR a.idMembre = 1Sur cette dernière je récupère bien les résultats, mais comment savoir à quoi ils correspondent?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 SELECT idFiche FROM Favori WHERE idMembre = 1 UNION SELECT id FROM Partie WHERE idMembre = 1 UNION SELECT idFiche FROM Noter WHERE idMembre = 1 UNION SELECT id FROM Commenter WHERE idMembre = 1 UNION SELECT id FROM Statut WHERE idMembre = 1 UNION SELECT idHumeur FROM Afficher WHERE idMembre = 1
Peut-être que je m'y prends mal, peut-être que c'est impossible ^^"
J'espère que vous saurez m'apporter une réponse
Cordialement.
Partager