Créer une requête qui renvoie un array dans l'array principal de la requête
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:
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:
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:
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:
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:
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 !