代码之家  ›  专栏  ›  技术社区  ›  alionthego

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

  •  0
  • alionthego  · 技术社区  · 5 年前

    我有一个名为list的表和一个名为join的表 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'
    

    这会将每个关系作为单独的行而不是与每个列表关联的数组返回。是否仍然可以返回包含联接表项_id数组的列表行?

    1 回复  |  直到 5 年前
        1
  •  2
  •   kip    5 年前

    你可以用 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
    
        2
  •  2
  •   nbk    5 年前

    GROUP_CONCAT 还有一些选择,比如选择Separaotr或订购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'