MySQL, объединить один элемент в несколько элементов в одном запросе - PullRequest
0 голосов
/ 19 мая 2010

Скажем, у меня есть два стола. Один содержит список предметов, а другой содержит изображения предметов.

Примерно так:

Предметы

+----+---------+
| id | name    |
+----+---------+
|  1 | oranges | 
|  2 | apples  | 
+----+---------+

Фотографии

+----+---------+
| id | item_id |
+----+---------+
| 1  | 1       | 
| 2  | 2       | 
| 3  | 2       | 
+----+---------+

У меня такой вопрос: возможно ли в одном запросе выбрать элемент 2 из Items и объединить все строки в таблице Pictures, чья item_id ссылается на тот же идентификатор?

Я уверен, что перепробовал почти все, что мог придумать, но ничего не приходит в голову. Я прошу прощения, если ответ на этот вопрос прост, но он сейчас ускользает от меня.

EDIT

@ Andomar , это работает, но не дает мне желаемых результатов. Я думаю, мне следует быть более ясным и спросить, возможно ли получить результаты, которые похожи на что-то вроде этого (это массив php, но организация - это то, что мне нужно):

$results = array(
    [0] => array(
        'id'    => 1,
        'name'  => 'oranges',
        'images' => array(
            [0] => ...,
        ), 
    ),
    [1] => array(
        'id'    => 2,
        'name'  => 'apples',
        'images' => array(
            [0] => ...,
            [1] => ...,
        ), 
    ),
);

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Соединение должно сработать:

select *
from Items i
left join Pictures p on p.item_id = i.id
where i.id = 2
1 голос
/ 19 мая 2010
SELECT i.name, GROUP_CONCAT(p.id SEPARATOR ',') AS pictures
FROM Items i
LEFT JOIN Pictures p
    ON p.item_id = i.id
WHERE i.id = 2

Без GROUP_CONCAT будет возвращаться отдельная строка для каждого совпавшего изображения. Группируя результаты из таблицы Pictures, вы можете получить в результате одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...