mysql concat数据如果null结束,如果不为null则继续concat

时间:2013-07-29 02:45:56

标签: mysql concat

我在使用sql问题之前​​已经使用了堆栈溢出并且成功了。

这次我的下一期可能不会那么成功。

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

每列都有一个语句,如“我的狗跑”或列为空。

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

除了行之外,所有行都以简单的pk开头,从1开始直到10,000。

表格每行的数据长度不一致。

例如,第1行在连续5列中有一个语句,第2行在37个连续列中有一个语句,第3行在19个连续列中有一个语句,等等。

我需要做的是编写一些简单的代码,使用表Statements_2列Bullet中的语句创建一个html格式的bullet类型段落。例如:

我的狗跑了 14个苹果味道很好
是的,这很有趣 我在浪费资源

我理解如何只是连接整行列,但这会浪费cpu和脚本运行时间,并最终在网页上留下大量的空白区域,这些空白区域存在空数据将取决于行列总和的数据量。

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

关于从哪里开始的任何建议?

1 个答案:

答案 0 :(得分: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()是将一堆值与分隔符连接起来的一种方便的方法。