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

问题描述:

假设我有两个表格。一个包含项目列表,一个包含项目的图片。MySQL,在单个查询中将一个项目连接到多个项目

事情是这样的:

项目

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

图片

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

我的问题是:是否有可能在一个单一的查询,以便从Items选择项目2并加入中的所有行表的item_id引用相同的ID?

我相信我已经尝试了几乎所有我能想到的东西,但是没有什么可以想到的。我很抱歉,如果答案很简单,但现在只是逃避我。

编辑

@Andomar,这样的作品,但它并不完全给我我想要的结果。我想我应该更清楚,问的是有可能得到的是类似这样的结果(这是一个PHP数组,但该组织是我后):

$results = array(
    [0] => array(
     'id' => 1, 
     'name' => 'oranges', 
     'images' => array(
      [0] => ..., 
     ), 
    ), 
    [1] => array(
     'id' => 2, 
     'name' => 'apples', 
     'images' => array(
      [0] => ..., 
      [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表的结果进行分组,您可以得到单行结果。

+0

我编辑了这个问题,但您的查询似乎非常接近我正在寻找的内容。这并不是原始问题的一部分,但我想知道是否有一种方法可以像'(p.name +“。”+ p.extension)'这样在'GROUP_CONCAT'语句中执行某些操作'以最终结束像'img1.png,img2.png'这样的结果? – bschaeffer 2010-05-19 02:36:14

+1

您可以使用'CONCAT',例如:'GROUP_CONCAT(CONCAT('img',p.id,'.png')SEPARATOR',')'。 – Alec 2010-05-19 09:55:12

联接应该做的伎俩:

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

感谢您的快速回复。它的效果很好......但我想我应该更清楚地知道理想的结果。我编辑了这个问题,并且非常感谢你可能有的任何其他输入。 – bschaeffer 2010-05-19 02:21:03