2013-07-29 57 views
0

我用堆在流之前,我的SQL的问题和成功。MySQL的CONCAT数据结束,如果不为空,继续CONCAT

这次我可能不会与我的下一个问题是成功的。

我有一个表,我们将调用Statements_1有大约50列,可以说10,000行。

每列都有要么喜欢“我的狗跑”,或者列在它的声明为空。

列标记为1,2,3,等等,直到50

除了行都开始用简单的PK的从1开始,直到10,000。

数据不是上表中的每一行中的长度是一致的。

例如列#1在连续5列的说法,列#2在连续的37列一份声明中,列#3在连续19列,声明等

我需要做什么是写一些简单的代码,将创建一个HTML格式的项目符号类型的段落使用语句到表Statements_2列Bullet。例如:

我的狗运行
14的苹果味道不错
是的,这很有趣
我在浪费资源

我知道如何做到这CONCAT列的整排,但是这将是一个浪费CPU和脚本运行时间,并最终在网页上留下大量的空白空间,其中存在空数据,这将根据行列的总和有多少数据而变化。

不仅浪费时间,而且内存建立得太快我必须限制脚本一次可以说80个,这样服务器就不会锁定并在超载内存使用后给我一个网关超时。

从哪里开始有何建议?

回答

0

你是在找这个吗?

SELECT id, 
     CONCAT_WS(' ', 
       COALESCE(col1, ''), 
       COALESCE(col2, ''), 
       COALESCE(col3, ''), 
       COALESCE(col4, ''), 
       COALESCE(col5, '')) bullet 
    FROM Statements_1 

输出:

 
| ID |     BULLET | 
---------------------------------- 
| 1 | my dog runs    | 
| 2 | 14 apples taste good  | 
| 3 | yes this is fun   | 
| 4 | I am wasting my resources | 

这里是SQLFiddle演示

COALESCE返回列表中的第一个非NULL值。在示例中,如果列值为NULL,则返回空字符串,否则返回值本身。
现在CONCAT_WS()是一种方便的方式来连接一组值与分隔符。

+0

你能解释一下concat_ws的功能吗?以及融合?我以前从未使用任何变化。另外SQLFiddle非常有用! – Chris

+0

@Chris查看更新后的答案以获得一些解释。如果这是你想要的,请考虑['接受'](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案。 – peterm

+0

@Chris有帮助吗?你的问题需要更多帮助吗? – peterm