2017-05-25 46 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'时,这不会添加逗号。 –

相关问题