2012-08-14 47 views
0

我遇到了GROUP_CONCAT问题并将结果导出到csv。GROUP_CONCAT问题并输出到csv

请考虑以下表格
搜索结果
with columns search Id |说明|投票|搜索类别

and consider the following data in the table 
1|java, beans|2|java 
2|serialization|3| java 
3|jquery| 1|javascript 
4|mysql joins|5| database 

我需要在以下格式

Search Category| description1 | description 2 | votes 1 | votes 2 
java   |java,beans | serialization | 2  | 3 
javascript  |jquery   |    | 1 
database  | mysqljoins |    | 5 

我需要输出这个数据到CSV文件的输出。

我已经写以下查询 选择类别,GROUP_CONCAT(介绍),GROUP_CONCAT(票)从search_results组由search_category INTO OUTFILE通过终止“”通过“'线包围“/tmp/out.csv”字段以'\ n'结尾;

但是,以下是 的问题 - 上面的查询返回一列描述和显示逗号分隔值的投票,我需要为每个值单独列(如期望的输出) - 对于javascript类别,输出以格式返回

javascript|jquery|5<br/> 

我需要输出的格式为 javascript | jquery | | 5 | |

应该有空值

回答

0
SELECT 
    s1.search_category 
    , s1.description AS description1 
    , ISNULL(s2.description, '') AS description2 
    , s1.votes AS votes1 
    , ISNULL(s2.votes, '') AS votes2 
FROM search_results AS s1 
LEFT OUTER JOIN search_results AS s2 ON s2.search_category = s1.search_category 
WHERE s1.search_id < s2.search_id 
INTO OUTFILE ... 

左侧的接合部表到自身会给你的第二列,如果有一个占位符。如果没有,那么值将是NULL,并且ISNULL将返回空格(或任何你想要的)。

如果有超过2行具有相同的search_category,那么您将在输出中获得多行,这可能不是您所追求的内容。

+0

该解决方案不适用于我的情况,因为某个类别的结果数量是动态的,所以用于显示说明和投票的列数是动态的 – coder 2012-08-16 06:46:31

+0

因此,您的输出将有不同数量的列(臭)或您希望将所有行填充到最大列数? – Andrew 2012-08-16 17:08:24