-1

php 配列を mysql に保存してからフィルタリングするにはどうすればよいですか?

例えば:

$array = array("a"=>13,"b"=>15,"c"=>17);

$mysql_val = json_encode($array);

mysql_query("INSERT INTO bla (`myfield`) VALUES('".$mysql_val."')"); 
             ^- i store data in this way

このクエリを実行するとき、どのようにフィルタリング、並べ替えなどを行うことができますか? たとえば、b が 10 より大きい行を選択するにはどうすればよいでしょうか?

4

7 に答える 7

2

これが、データベースの正規化、特に第 1 正規形の理由であり、グループの繰り返しを回避します。データをアトミックに保存することにより (データを小さな断片に分割することはできません)、データに対して操作を実行できます。

于 2012-09-13T08:29:02.847 に答える
2

まず、データベースを正しく使用していません。これが、並べ替えなどをフィルタリングできない理由です...

それぞれの列が必要a, b, cです。次に、SELECT * FROM bla ORDER BY a DESC代わりにキー => 値をマップするテーブルを使用するか、より良い可能性があります。

データを文字列として保存すると、 MySQLデータにアクセスできないため、並べ替えることができません。

キー (フィールド) 名がわからない場合にこのデータを格納する正しい (正規化された) 方法は次のとおりです。

bla
id | name
-- | ----
2  | james

blaDecorator or blaColumns
id | blaId | field | value
1  | 2     | a     | 13
2  | 2     | b     | 15
3  | 2     | c     | 17

データをこのように保持する必要がある場合(理由はわかりません)、SELECT * FROM blaそれを PHP に読み込み、PHP でArrayすべての並べ替えを行う必要があります。

データベースの正規化について学習するためのリソースは次のとおりです: http://www.phlonx.com/resources/nf3/

于 2012-09-13T08:27:39.073 に答える
1

いいえ、JSONデータはMySQL用の単なるテキストであるため、通常のテキスト関数を実行する以外に処理することはできません。

データベースとテキストからそれらを読み取り、PHPレベルでJSONに変換してから、アプリケーションで並べ替えまたはフィルター処理する必要があります。

これがNoSQLデータベースの使用を検討する上で重要な場合、それらの多くはネイティブにJSONベースです。

于 2012-09-13T08:27:21.243 に答える
1

あなたはそうしない。

これは、データベースにデータを保存するための恐ろしい方法です。データを列として保存し、データベースをデータベースとして使用します。

ただし、必要に応じて PostgeSQL を使用してください。参照: http://blog.redfin.com/devblog/2012/03/json_in_postgres.html

PostgeSQL の最新バージョンには、json 文字列内のデータを照会し、結合を行う関数があります。

于 2012-09-13T08:28:15.487 に答える
1

データを json として保存する場合は、MongoDBなどのドキュメント データベースの使用を検討する必要があります。それを使用すると、json データ内で検索、フィルタリングなどを行うことができます。

于 2012-09-13T08:31:03.523 に答える
0

そのようなデータを保存しないでください!3 つのフィールドを作成し、それらのフィールドにデータを格納します。

例:

$array = array("a"=>13,"b"=>15,"c"=>17);
$fields = array_keys($array);

mysql_query(
"INSERT INTO bla ( " . explode(',', $fields) . ") 
VALUES('" . explode(',' $array) . "')"); 
于 2012-09-13T08:32:22.850 に答える