2013-07-29 60 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