2014-02-11 294 views
0

我有一個查詢:Mysql的GROUP_CONCAT

SELECT GROUP_CONCAT(stores.store_name) 
FROM stores 
WHERE stores.id IN 
(

    SELECT 
    GROUP_CONCAT(users_x_stores.store_id) as stores_list 
    FROM users_x_stores 
    WHERE users_x_stores.user_id = 4 

); 

子查詢,單獨運行時,返回的3個結果GROUP_CONCAT - 14,4,8。

ID 14,4,8有相應的行 - 但整體查詢只返回一個商店名稱。

如果我將子查詢更改爲簡單的14,4,8,則整個查詢將起作用,並返回3個商店名稱的並置。

誰能告訴我我在這裏做錯了什麼嗎?

謝謝。

+0

我相信你想擺脫第二'GROUP_CONCAT的(。 ..)'function:'選擇users_x_stores.store_id作爲stores_list ...' – Phylogenesis

+0

您是否嘗試過沒有GROUP_CONCAT的子查詢?我相信外部IN可以接受查詢結果以及逗號分隔列表。 – Anthony

+0

Phylogenisis - 不錯的一個,這是答案,它現在工作正常。我在我的GROUP_CONCATs中過分熱心。 – ArkadePaulG

回答

-1

試試這個

SELECT GROUP_CONCAT(stores.store_name) 
FROM stores 
WHERE stores.id IN 
(
SELECT 
users_x_stores.store_id as stores_list 
FROM users_x_stores 
WHERE users_x_stores.user_id = 4 
); 
+0

可愛 - 謝謝Rakesh。很棒。 – ArkadePaulG

0

避免在子查詢中做一個,你大概可以使用JOIN。

假設users_x_stores.store_id包含該用戶的單個商店ID(與另一行上users_x_stores爲不同的存儲區爲同一用戶): -

SELECT GROUP_CONCAT(stores.store_name) 
FROM stores 
INNER JOIN users_x_stores 
ON stores.id = users_x_stores.store_id 
WHERE users_x_stores.user_id = 4 

如果sers_x_stores.store_id是逗號分隔的列表商店(不是一個好的表設計,以及可能不是你做了什麼,而是從原來的職位還不清楚),那麼你可以做到這一點

SELECT GROUP_CONCAT(stores.store_name) 
FROM stores 
INNER JOIN users_x_stores 
ON FIND_IN_SET(stores.id, users_x_stores.store_id) 
WHERE users_x_stores.user_id = 4