2015-12-16 30 views
2

我有以下查詢:MySQL的GROUP_CONCAT()組中的所有行

select card.id as id, photo.image as photo 
from card 
left outer join card_image as photo on (photo.card=card.id) 

如果我改變photo.image as photogroup_concat(photo.image) as photos我得到以下結果返回

+----+-------+ 
| id | photo | 
+----+-------+ 
| 1 |  2 | 
| 1 |  3 | 
| 1 |  4 | 
| 2 |  5 | 
| 2 |  6 | 
+----+-------+ 

+----+---------------+ 
| id | photo   | 
+----+---------------+ 
| 1 |  2,3,4,5,6 | 
+----+---------------+ 

但我的期望是

+----+-----------+ 
| id | photo  | 
+----+-----------+ 
| 1 |  2,3,4 | 
| 2 |  5,6 | 
+----+-----------+ 

即我想通過ID

回答

3

GROUP_CONCAT()是一個聚合的功能,如MAX()。它爲每個組產生一行。組由GROUP BY子句定義,在沒有這樣的子句的情況下 - 就像你的情況一樣 - 所有行都屬於同一個組。你顯然希望通過組card.id

select 
    card.id as id, 
    group_concat(photo.image) as photos 
from 
    card 
    left outer join card_image as photo 
    on (photo.card = card.id) 
group by card.id 

還要注意與彙總查詢,標準SQL允許只選擇分組列和團體的功能。在原始示例中沒有分組列,因此您依賴MySQL擴展來完全可以選擇card.id。另一方面,上面提供的代碼在這方面是標準的(但group_concat()仍然是MySQL-ism)。

2

你應該使用GROUP BY與您的查詢是得到的一組照片每張卡:

select card.id as id, group_concat(photo.image) as photos 
from card 
left outer join card_image as photo on (photo.card=card.id) 
GROUP BY id