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 :

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 !" |
Donc à ce niveau il m'est très facile de récupérer les commentaires d'un sujet en une seule requête.

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 :

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      |
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
 
---------------------
     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) :

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"
                        )
 
                )
 
        )
 
)
Comment on peut le voir, j'ai notamment la clé "ITEMS" qui contient un array contenant tous les items liés à l'utilisateur.


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 !