MySQL での配列の保存と取得
リレーショナル データの正規化の問題のため、単一の MySQL フィールドに配列を保存することはお勧めできません。ただし、配列を 1 つのフィールドに保存する必要がある場合は、serialize() 関数と unserialize() 関数を使用できます。
配列 ($a) を MySQL フィールドに保存するには、次を使用して文字列に変換します。 serialize():
$a_serialized = serialize($a); // $a_serialized: 'a:2:{i:1;a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;}i:2;a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;}}'
次に、シリアル化された値をデータベースに挿入します。
データベースから配列を取得するには、次のクエリを実行します。 unserialize():
$query = "SELECT my_array_field FROM my_table"; $result = mysql_query($query); $row = mysql_fetch_assoc($result); $a = unserialize($row['my_array_field']);
または、json_encode() と json_decode() を使用して、それぞれ JSON 形式から配列をエンコードおよびデコードすることができます。
代替アプローチ: リレーショナル データベース設計
配列を 1 つのフィールドに格納するのではなく、データベース スキーマを再構築して、配列要素を関連テーブル内の個別のレコードとして表すことを検討してください。これにより、適切なリレーショナル モデリングと効率的なクエリが可能になります。
たとえば、配列を考えてみます:
$a = [ 1 => [ 'a' => 1, 'b' => 2, 'c' => 3 ], 2 => [ 'a' => 1, 'b' => 2, 'c' => 3 ], ];
配列のキーと値に対して別のテーブルを作成できます:
CREATE TABLE keys ( id INT UNSIGNED NOT NULL, a INT UNSIGNED NOT NULL, b INT UNSIGNED NOT NULL, c INT UNSIGNED NOT NULL, PRIMARY KEY (id) ); CREATE TABLE values ( id INT UNSIGNED NOT NULL, value INT UNSIGNED NOT NULL, key_id INT UNSIGNED NOT NULL, PRIMARY KEY (id), FOREIGN KEY (key_id) REFERENCES keys(id) );
次に、配列要素をそれぞれのテーブルに挿入します。
INSERT INTO keys (id, a, b, c) VALUES (1, 1,2,3); INSERT INTO values (id, value, key_id) VALUES (1, 1, 1); INSERT INTO values (id, value, key_id) VALUES (2, 2, 1); INSERT INTO values (id, value, key_id) VALUES (3, 3, 1); INSERT INTO keys (id, a, b, c) VALUES (2, 1,2,3); INSERT INTO values (id, value, key_id) VALUES (4, 1, 2); INSERT INTO values (id, value, key_id) VALUES (5, 2, 2); INSERT INTO values (id, value, key_id) VALUES (6, 3, 2);
このアプローチにより、効率的なクエリが可能になります。リレーショナル データベース内の配列データの操作。
以上がMySQL で配列を効率的に保存および取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。