2011-10-05 127 views
1

我有一些問題與查詢似乎與GROUP_CONCAT這麼想的工作,這是我寫的MySQL查詢與GROUP_CONCAT和這麼想的工作子查詢

SELECT category, (
    SELECT GROUP_CONCAT(DISTINCT `short` SEPARATOR ', ') 
    FROM `ods_category` 
    WHERE cid IN (n.category) 
    ORDER BY cid 
) AS catstring 
FROM ods_news AS n 

問題只是列「 catstring」 containe只有1項子查詢發現,但如果我用

WHERE cid IN (19,18,3) 

更換

WHERE cid IN (n.category) 

它的窩k好,但你可以看到這不是動態的 你知道爲什麼n.category只限於一個項目嗎?

IDK的,如果u需要這一點,但表的sintetic strucure是

ods_news       ods_category 
id  | category    cid  | short 
1  | 1      1  | AA 
2  | 3      2  | BB 
3  | 4,5      3  | CC 
4  | 1,2,4     4  | DD 
5  | 6      5  | EE 
6  | 2,1,6     6  | FF 

是結果我有什麼,我想

results i get      result i want 
category | catstring    category | catstring 
1  | AA      1  | AA  
3  | CC      3  | CC 
4,5  | DD      4,5  | DD,EE 
1,2,4 | AA      1,2,4 | AA,BB,DD 
6  | FF      6  | FF 
2,1,6 | BB      2,1,6 | BB,AA,FF 
+2

這聽起來像它會做的類別更有意義的新聞項目是一個多一對多的方式單獨的表,而不是以逗號分隔的字符串形式存儲。以目前的形式處理它將會更加困難。當category是一個字符串時,使用'IN'不會像你想要的那樣工作。 –

回答

0

我創建您的測試數據,並更換了IN( )與另一個功能。它提供了正是你想要的結果:

SELECT category, REPLACE((
    SELECT GROUP_CONCAT(DISTINCT `short` SEPARATOR ', ') 
    FROM `ods_category` 
    WHERE FIND_IN_SET(cid, REPLACE(n.category, ' ', '')) != 0 
    ORDER BY cid 
), ' ', '') AS catstring 
FROM ods_news AS n 

結果是:

+----------+------------+ 
| category | catstring | 
+----------+------------+ 
| 1  | AA   | 
| 3  | CC   | 
| 4,5  | DD,EE  | 
| 1,2,4 | AA,BB,DD | 
| 6  | FF   | 
| 2,1,6 | AA,BB,FF | 
+----------+------------+ 
6 rows in set (0.00 sec)