Bonjour à vous !
Je cherche à faire une chose en particulier, mais je sais même pas si c'est possible donc j'explique ma situation : je souhaite afficher des commentaires sur un sujet (jusque là facile) qui peuvent contenir plusieurs items venant d'une autre table.
Pour mieux comprendre, voici le schéma de ma base de donnée :
Donc à ce niveau il m'est très facile de récupérer les commentaires d'un sujet en une seule requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 ------------------ -------------------- users subjects ------------------ -------------------- | ID | USERNAME | | ID | TITLE | | 4 | Insow | | 9 | 'Subject 1' | ------------------------------------------- comments ------------------------------------------- | ID | USER_ID | SUBJECT_ID | TEXT | | 1 | 4 | 9 | "J'ADORE !" |
C'est maintenant que les choses sérieuses commencent.
J'ai des items dans ma base de donnée qui sont liés aux sujets mais pas aux commentaires/utilisateurs, comme ceci :
Sauf que les utilisateurs peuvent choisir plusieurs de ces items et j'aimerais les lier aux commentaires, pour cela j'ai créé une nouvelle table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ---------------------------------- items ---------------------------------- | ID | ITEM_NAME | SUBJECT_ID | | 4 | 'Mon item 1' | 9 | | 5 | 'Mon item 2' | 9 | | 8 | 'Mon item 3' | 9 |
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 --------------------- users_items --------------------- | USER_ID | ITEM_ID | | 4 | 4 | | 4 | 5 | | 4 | 8 |
Je possède 1 donnée de base : l'ID du sujet. Je souhaite récupérer tous les commentaires concernant ce sujet en particulier.
Et ma question est : est-ce que je peux, en une seule requête, récupérer :
1) Les commentaires des utilisateurs sur ce sujet (oui évidemment)
2) Les différents items liés à 1 seul utilisateur que j'afficherai en-dessous des commentaires
Pour avoir une idée claire, j'aimerais récupérer les données comme ceci (grosso-modo) :
Comment on peut le voir, j'ai notamment la clé "ITEMS" qui contient un array contenant tous les items liés à l'utilisateur.
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
25
26
27
28
29
30
31
32
33 Array ( [0] => Array ( [USERNAME] => "Insow" [TEXT] => "J'ADORE !" [ITEMS] => Array ( [0] => Array ( [ID] => 4 [ITEM_NAME] => "Mon item 1" ) [1] => Array ( [ID] => 5 [ITEM_NAME] => "Mon item 2" ) [2] => Array ( [ID] => 8 [ITEM_NAME] => "Mon item 3" ) ) ) )
Je me suis essayé à une requête que voici :
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 SELECT * FROM subjects_comments INNER JOIN users ON users.id = subjects_comments.user_id JOIN ( SELECT * FROM users_items INNER JOIN items ON items.id = users_items.item_id ) derived ON derived.user_id = subjects_comments.user_id WHERE subjects_comments.subject_id = :subject_id
Mais quoi qu'il en soit je n'arrive pas à obtenir une clé "items" qui contiendrait un array avec les différents items. Est-ce possible de faire cela ?
Merci beaucoup par avance et désolé pour ce gros pavé, j'ai préféré bien expliquer la situation !
Partager