1

私は以下のようなphp配列を持っています。

$arr = array(
                array(
                    "date"=>date('Y-m-d'),
                    "message"=>"test message 1",
                    "from_id"=>21,
                    "to_id"=>14
                ),
                array(
                    "date"=>date('Y-m-d'),
                    "message"=>"test message 2",
                    "from_id"=>23,
                    "to_id"=>12
                )               
            );

この配列に対してjson_encodeを実行して、jsonに変換します。

$jsonarr =  json_encode($arr);

$ jsonarrの出力:

[
 {"date":"2012-11-22","message":"test message 1","from_id":21,"to_id":14},
 {"date":"2012-11-22","message":"test message 2","from_id":23,"to_id":12}
]

その後、これをmysqlテーブルに挿入します。ここまではすべて大丈夫です。

今、私はこれを連結によって別のjsonで更新する必要があります。

別のJSON:

[
 {"date":"2012-11-22","message":"test message 3","from_id":28,"to_id":2},
 {"date":"2012-11-22","message":"test message 4","from_id":53,"to_id":72}
]

そして、mysqlテーブルのフィールドを次のように表示したいと思います。

[
 {"date":"2012-11-22","message":"test message 1","from_id":21,"to_id":14},
 {"date":"2012-11-22","message":"test message 2","from_id":23,"to_id":12},
 {"date":"2012-11-22","message":"test message 3","from_id":28,"to_id":2},
 {"date":"2012-11-22","message":"test message 4","from_id":53,"to_id":72}
]

このためのUPDATEクエリを作成するにはどうすればよいですか。

これは、2つのクエリを使用して実行できます。1つのクエリを選択し、フィールドをフォーマットして、後で更新します。しかし、これは1つのクエリで達成できますか?

4

1 に答える 1

1

当面の問題の解決策は次のとおりです。

MySQL は JSON 値をネイティブにサポートしていません。データベースから値を取得する必要があります。

SELECT FOR UPDATE my_json_field
FROM my_table
WHERE id = 555;

次に、PHP スクリプトでそれを変更します。

$my_array = json_decode($value_of_my_json_field);
$my_array = array_merge($my_array, $arr);
$value_of_my_json_field = json_encode($my_array);

次に、DB で更新します。

UPDATE my_table
SET my_json_field = :value_of_my_json_field
WHERE id = 555;

これがトランザクションで発生することを確認してください。また、InnoDB ストレージ エンジンを使用する必要があります。

しかし、もっと興味深い質問は、 JSON を DB に保存する必要があるのはなぜですか? 別のテーブルを使用しない理由:

  • 表: メッセージ
    • ID 整数
    • 日付のタイムスタンプ
    • from_id 整数 (これは外部キーである必要があります)
    • to_id 整数 (これは外部キーである必要があります)

次に、そのテーブルに挿入するだけです。これが正しい方法です。JSON を使用する正当な理由がない場合は、JSON を削除することをお勧めします。

于 2012-11-22T06:36:29.847 に答える