我之前曾在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()
是使用分隔符连接一堆值的便捷方法。