2014-03-26 56 views
0

我有查詢返回給我的所有者和他的寵物的數字的顏色。如何改爲返回MySQL查詢返回詳細的group_contact信息(加入)?

[Red][1,2] 

成才更詳細的像

[Red][Rufus, Bali] 

這是寵物的名字與寵物的ID加盟。是否可以在每個寵物名稱上創建另一列? (不使用courst的幾個選擇)

CREATE TABLE pet (id INT, name VARCHAR(20)); 
insert into pet values (1,"Rufus"); 
insert into pet values (2,"Bali"); 
insert into pet values (3,"Lolo"); 

CREATE TABLE own (id INT, own_name VARCHAR(20), own_color VARCHAR(20)); 
insert into own values (1,"Me", "Red"); 
insert into own values (2,"Other owners" ,"Green"); 

CREATE TABLE pet_owner (id INT, id_pet INT, id_own INT); 
insert into pet_owner values (1, 1, 1); 
insert into pet_owner values (2, 2, 1); 
insert into pet_owner values (3, 3, 2); 

DROP procedure if exists `pet`; 
DELIMITER $$ 
CREATE procedure `pet`() 
BEGIN 
set @param = 1; 
select o.own_color as color, 
     (select group_concat(id_pet) from pet_owner po where po.id_own = @param) as pets 
from own o 
where o.id = @param; 
END$$ 

call pet; 
+0

考慮在處理數據顯示的問題應用程序級別(假設您有一個 - 例如簡單的PHP循環)。 – Strawberry

+0

是的,但是當我使用過程作爲數據源對象時,我更願意在數據庫上進行大部分數據操作。 – boski

+1

好,但我更願意將DB視爲數據存儲和檢索。我自己的看法是(除非你使用其他集合函數)組連接可以在表示層更容易和靈活地處理。 – Strawberry

回答

1
select o.own_color as color, 
    (select group_concat(p.name) from pet_owner po join pet p ON p.id = po.id_pet where po.id_own = @param) as pets 
0

請嘗試以下 - 鍵是聚集GROUP_CONCAT函數和GROUP BY子句:

select o.own_color as color, group_concat(p.name) as pet_names 
from own o 
    inner join pet_owner po on o.id = po.id_own 
    inner join pet p on po.id_pet = p.id 
group by o.id;