0

我之前在我的 sql 问题中使用过 stack over flow 并且成功了。

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

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

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

这些列被标记为 1、2、3 等,直到 50。

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

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

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

我需要做的是编写一些简单的代码,这些代码将使用表 Statements_2 列 Bullet 中的语句创建一个 html 格式的项目符号类型段落。前任:

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

我了解如何仅连接整行列,但这会浪费 cpu 和脚本运行时间,最终会在创建的网页上留下大量空白空间,其中存在空数据,这些空间会有所不同关于行列总和中有多少数据。

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

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

4

1 回答 1

0

Are you looking for this?

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

Output:

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

Here is SQLFiddle demo

COALESCE returns the first non-NULL value from the list. In the example if a column value is NULL it returns an empty string otherwise the value itself.
Now CONCAT_WS() is a convinient way to concatenate a bunch of values with a separator.

于 2013-07-29T04:03:56.227 回答