2017-05-25 70 views
0

我試圖在我的php應用程序中更新mysql表。這是我想弄明白的:僅當字段已具有值時,mysql纔會連接數據

如果「my-field」不包含任何數據,我想用特定的數據字符串更新該字段。

如果「我的字段」已經包含數據,我想連接更多的數據給它,並用逗號分隔。

「我的場」被設置爲「NOT NULL」

下面是我使用的代碼,我覺得是接近我所需要的,但它不工作。

UPDATE my-table SET 
my-field = 
    IF( 
    LENGTH('my-field'), 
    CONCAT_WS(
     CHAR(44 USING UTF8), 
    'my-field', 
    'if-my-field-has-length-data' 
    ), 
'if-my-field-has-NO-length-data'); 

我試過下面的代碼。它實際上工作。但是,它最終總是添加逗號開始像這樣:

note the comma here => ,data-set-1,data-set-2

我正在尋找這樣的結果:

note no comma on first data set => data-set-1,data-set-2

UPDATE my-table SET 
my-field = 
    CONCAT_WS(
    CHAR(44 USING UTF8), 
    'my-field', 
    'general-data' 
) 

有誰知道做我在找什麼?

回答

2

從「我的場」刪除引號:

UPDATE my-table SET 
my-field = 
    IF( 
LENGTH(my-field), 
CONCAT_WS(
    CHAR(44 USING UTF8), 
my-field, 
'if-my-field-has-length-data' 
), 
'if-my-field-has-NO-length-data'); 
-1

我不建議以逗號分隔的字符串存儲值。讓我假設你必須這樣做,因爲某些原因:

UPDATE mytable 
    SET myfield = CONCAT(COALESCE(CONCAT(myfield, ','), ''), @newvalue) 
    WHERE . . .; 

真的,但是,你應該使用結合表,在表格中每個字段值和每個ID一行。

+1

爲什麼要存儲逗號分隔的字符串有許多有效的原因。這可能是因爲不需要根據字段中的數據進行查詢,並且任何數據解析都會在完全獨立的應用程序層中進行。 –

+0

正確,我不需要查詢數據。只是尋找一種乾淨的方式來存儲我可以在以後輕鬆使用PHP解析的正在進行的列表。加上你的代碼在myfield空時仍然在逗號開頭 – Austin

+0

@奧斯汀。 。 。當'myfield'最初是'NULL'時,這不會添加逗號。 –

相關問題