簡體   English   中英

MySQL JOIN / GROUP_CONCAT第二個表?

[英]MySQL JOIN / GROUP_CONCAT second table?

所以我有這個完美的查詢:

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;

假設我有另一個包含電話號碼的表格,對於“用戶”,用戶可以擁有任意數量的電話號碼......我將如何圍繞完全相同的事情進行操作? 換句話說,我想在“電話”表中找到具有相同“user_id”的所有phone_numbers的另一列,並將它們連接在一起(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;

沒有運氣......或至少查詢執行但它做了一些奇怪的重復事情......任何幫助都會很棒!

謝謝!

它做了奇怪的事情,因為有某些行的交叉產品。 您可以使用DISTINCT關鍵字獲取唯一的電話號碼:

GROUP_CONCAT(DISTINCT phones.phone_number) AS phone_numbers,

查看文檔 或者,您可以在另一個查詢中獲取電話號碼,您只需選擇條件為WHERE phones.user_id IN (x, x, x, ...)的電話號碼(x是從第一個查詢返回的ID)。

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

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`

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM