MySQL,将一个项目连接到单个查询中的多个项目

时间:2010-05-19 01:50:49

标签: mysql join

说我有两张桌子。一个包含项目列表,一个包含项目的图片。

这样的事情:

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

图片

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

我的问题是:在单个查询中是否可以从2中选择项Items并加入Pictures表中item_id引用的所有行同样的身份?

我确信我已经尝试了几乎所有我能想到的东西,但没有想到任何事情。如果答案很简单,我很抱歉,但现在只是逃避了我。

修改

@Andomar ,这有效,但它并没有完全给我我想要的结果。我想我应该更清楚,并且问是否有可能得到类似这样的结果(它是一个php数组,但组织就是我所追求的):

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

2 个答案:

答案 0 :(得分:2)

连接应该可以解决问题:

select *
from Items i
left join Pictures p on p.item_id = i.id
where i.id = 2

答案 1 :(得分:1)

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表中的结果进行分组,您可以得到一行结果。