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
表的结果进行分组,您可以得到单行结果。
答
联接应该做的伎俩:
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
我编辑了这个问题,但您的查询似乎非常接近我正在寻找的内容。这并不是原始问题的一部分,但我想知道是否有一种方法可以像'(p.name +“。”+ p.extension)'这样在'GROUP_CONCAT'语句中执行某些操作'以最终结束像'img1.png,img2.png'这样的结果? – bschaeffer 2010-05-19 02:36:14
您可以使用'CONCAT',例如:'GROUP_CONCAT(CONCAT('img',p.id,'.png')SEPARATOR',')'。 – Alec 2010-05-19 09:55:12