如何在一个mysql查询中从一个表中获取值并从另一个联接表中获取值数组?

时间:2020-03-08 02:20:30

标签: mysql

我有一个名为列表的表和一个名为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数组的列表行吗?

2 个答案:

答案 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_CONCATGROUP 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