我之前曾在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个,这样服务器在超负荷使用后不会锁定并给我网关超时。

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

最佳答案

您在找这个吗?

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


输出:

| ID |子弹头|
----------------------------------
| 1 |我的狗跑|
| 2 | 14个苹果口感好|
| 3 |是的,这很有趣|
| 4 |我在浪费资源|


这是SQLFiddle演示

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

10-08 09:05
查看更多