我有一个名为列表的表和一个名为items_to_lists
的联接表。
我要查询并返回特定用户的所有列表:
SELECT lists.* FROM lists WHERE lists.user_id = 'someUserID'
但是我还想在此查询中将联接表中的所有item_id值都包含为每个列表的数组。这可能吗?我想退货的是:
list_id = ... , user_id = ... [deck_id1, deck_id2, etc] for each list.
我尝试过的是:
SELECT lists.*, items_to_lists.item_id FROM lists INNER JOIN items_to_lists ON items_to_lists.list_id = lists.list_id WHERE lists.user_id = 'someUserID'
这会将每个关系作为单独的行而不是与每个列表关联的数组返回。反正有返回带有联接表item_id数组的列表行吗?
答案 0 :(得分:2)
GROUP_CONCAT还有更多选项,例如选择SEPERAOTR或订购ID
SELECT l.*, CONCAT('[',GROUP_CONCAT(DISTINCT il.item_id) ,']')
FROM lists l INNER JOIN items_to_lists il ON il.list_id = l.list_id
WHERE l.user_id = 'someUserID'
答案 1 :(得分:2)
您可以将GROUP_CONCAT
与GROUP BY
一起使用,如下所示:
SELECT
lists.list_id, GROUP_CONCAT(items_to_lists.item_id)
FROM lists INNER JOIN items_to_lists ON items_to_lists.list_id = lists.list_id
WHERE
lists.user_id = 'someUserID'
GROUP BY
lists.list_id