2017-05-25 3 views
0

私のPHPアプリケーションでmysqlテーブルを更新しようとしています。これは私が把握しようとしているものです:mysqlは、フィールドにすでに値がある場合にのみデータを連結します

"my-field"にデータが含まれていない場合は、そのフィールドを特定のデータ文字列で更新したいと考えています。

"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行で、ジャンクションテーブルを使用する必要があります。

+1

コンマ区切りの文字列を格納する理由はたくさんあります。フィールドのデータに基づいて照会する必要はなく、データの解析はアプリケーションの完全に別のレイヤーで行われることがあります。 –

+0

正しいです、私はデータを照会する必要はありません。ちょうど私がPHPで後で簡単に解析できる進行中のリストを保存するためのきれいな方法を探しています。また、myfieldが空の場合は、最初にコンマを配置します。 – Austin

+0

@Austin。 。 。これは、 'myfield'が最初は' NULL'だったときにコンマを追加しません。 –

関連する問題