Как получить значение из одной таблицы и массив значений из другой таблицы соединений в одном запросе mysql? - PullRequest
0 голосов
/ 08 марта 2020

У меня есть таблица со списками и таблица соединений под названием 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 ]

2 голосов
/ 08 марта 2020

Вы можете использовать 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 голосов
/ 08 марта 2020

GROUP_CONCAT имеет еще несколько опций, таких как выбор SEPERAOTR или упорядочение идентификаторов

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...