2011-10-05 135 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)