2016-04-16 2 views
0

У меня есть две таблицы в отношении «один ко многим».SELECT as alias to another SELECT

Таким образом, в таблице person У меня есть идентификатор, имя и т.д., и в таблице tags У меня есть идентификатор, PersonId, тег

И один человек может иметь N записей с различными тегами.

Я думал, что я мог бы сделать что-то вроде

SELECT id, name, 
    (SELECT * FROM tags WHERE personid = id) AS tags 
    FROM person 

И я ожидаю получить строку результата с НОМЕР (ID), STRING (имя), ARRAY (теги). Я знаю, как это сделать с циклом for, с двумя отдельными запросами, но я думаю, что MySQL должен быть лучшим для этого.

Если я делаю JOIN, я получаю много строк, bu. Я хочу сгруппировать все теги в массив-входе каждой строки, которую я получаю, т.е. один ряд на человека.

Возможно ли это?

ответ

1

Вы можете использовать GROUP_CONCAT с GROUP BY ид

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

Что-то вроде этого:

SELECT person.id, person.name, 
    GROUP_CONCAT(tags.name SEPARATOR ', ') FROM person 
    INNER JOIN tags ON tags.personid = person.id 
    GROUP BY person.id 
+2

Вы должны использовать псевдоним для поля тегов, как 'GROUP_CONCAT (...) AS теги '. В противном случае было бы трудно получить доступ к этой области на стороне приложения. –