Mysql Query с подзапросом с group_concat и не работает - PullRequest
1 голос
/ 05 октября 2011

У меня есть некоторые проблемы с Query, кажется, IN не работает с 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", содержащем только 1-й элемент, найденный в подзапросе, но если я заменю

WHERE cid IN (n.category) 

с

WHERE cid IN (19,18,3)

это хорошо работает, но, как вы видите, это не динамично Знаете ли вы, почему в категории n.category есть только один элемент?

idk, если вам это нужно, но синтетическая структура таблиц

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

1 Ответ

0 голосов
/ 30 июня 2012

Я создал ваши тестовые данные и заменил 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)
...