2012-01-26 14 views
0

したがって、シリアル化された配列を格納するフィールドがデータベースにあります。mysqlからシリアル化されたデータを引き出す

$array = array('count1' => 10, 'count2' => 20, 'count3' => 4); 

シリアライズさ:

a:3:{s:6:"count1";i:10;s:6:"count2";i:20;s:6:"count3";i:4;} 

MySQLのクエリを使用してCOUNT1 + COUNT2 + COUNT3を引っ張っすることは可能でしょうか?私はPHPのようなものを探していると思います。確かにこれはできませんが、私は頼むと思っていました。

私は最高のcount1 + count2 + count3行をプルし、合計カウントを返す必要があります。 TONSの行があるため、各行をループしてシリアル化を解除すると機能しません。

答えて

2

シリアル化されたデータの一部にSQLを使用してアクセスする必要がある場合は、別々の列に格納する必要があります。

正規表現などのテクニックを使用して、この文字列の3つの値にアクセスすることは可能ですが、インデックスが役に立たないため、WHERE条件で使用すると非常に遅くなります。プログラミング言語でgotoを使用するよりも悪いです

解決策は、新しい列を作成し、すべての行を繰り返し処理し、それらを直列化解除して新しい列に格納することです。それはしばらく時間がかかるかもしれませんが、一度しか必要としません。

アプリケーションによっては、3つの列を作成して各値を別々に格納する方がよい場合があります。

+0

私は50以上のフィールドを持ついくつかの新しいテーブルを作成する必要があります。私はシリアライズされたデータを使用するのが最良の選択だと考えていますそれは、直列化された配列の1つの要素ではなく、3つの合計でmysqlの列を注文することが可能でしょうか? – domino

関連する問題