2010-05-19 66 views
0

假設我有兩個表格。一個包含項目列表,一個包含項目的圖片。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] => ..., 
     ), 
    ), 
); 

回答

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

2

聯接應該做的伎倆:

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

相關問題