2010-03-01 137 views
4

所以我有這個疑問完美的作品:MySQL JOIN/GROUP_CONCAT第二個表?

SELECT users.*, 
GROUP_CONCAT(categories.category_name) AS categories 
FROM users 
LEFT OUTER JOIN user_categories ON users.user_id = user_categories.user_id 
LEFT OUTER JOIN categories ON user_categories.category_id = categories.category_id 
WHERE users.user_city = 'brooklyn' 
GROUP BY users.user_id 
LIMIT 10; 

說我有保存的電話號碼,在「用戶」,用戶可以有任意數量的另一個電話號碼錶...我將如何去圍繞我正在做的完全相同的事情來分類?換句話說,我希望在「phones」表中找到具有相同「user_id」的所有phone_number,並將它們連接在一起(phone1,phone2,phone3)。我曾嘗試過:

SELECT users.*, 
GROUP_CONCAT(phones.phone_number) AS phone_numbers, 
GROUP_CONCAT(categories.category_name) AS categories 
FROM users 
LEFT OUTER JOIN phones ON users.user_id = phones.user_id 
LEFT OUTER JOIN user_categories ON users.user_id = user_categories.user_id 
LEFT OUTER JOIN categories ON user_categories.category_id = categories.category_id 
WHERE users.user_city = 'brooklyn' 
GROUP BY users.user_id 
LIMIT 10; 

沒有運氣...或至少查詢執行,但它做了一些奇怪的重複的事情......任何幫助將是可怕的!

謝謝!

回答

6

它確實很奇怪,因爲存在某些行的叉積。您可以使用DISTINCT關鍵字得到的只有唯一的電話號碼:

GROUP_CONCAT(DISTINCT phones.phone_number) AS phone_numbers, 

檢查documentation。或者,您可以在另一個查詢中獲得電話號碼,在該查詢中,您只需選擇具有諸如WHERE phones.user_id IN (x, x, x, ...)(x是從第一個查詢返回的ID)的條件的電話號碼。

+0

好吧,這個按預期工作......只是想說明,在GROUP_CONCATS中有必要使用DISTINCT – mike 2010-03-01 19:20:24

3

這發生在我身上,後來我不得不改變我的查詢。

SELECT 
    (SELECT GROUP_CONCAT(`partnumber`) FROM `product_partnumber` AS `n` WHERE `p`.`id`=`n`.`product_id`) as `partnumbers`, 
    (SELECT GROUP_CONCAT(`oem`) FROM `product_oem` AS `n` WHERE `p`.`id`=`n`.`product_id`) as `oems` 
FROM `product` AS `p` 

所以我不得不使用子查詢,否則我有重複。