MySQL に配列を効果的に保存する方法
さまざまな理由から、配列をデータベースに保存することが必要になることがよくあります。ただし、配列の組み込みデータ型を持つ他のプログラミング言語とは異なり、MySQL には配列を格納するための専用のデータ型がありません。ここで、MySQL で配列を保存する最善の方法は何かという問題が生じます。
配列は単一のフィールドに保存できますか?
簡単な答えは「いいえ、ありません」です。単一の MySQL フィールドに配列を格納するための推奨される方法。配列を 1 つのフィールドに保存すると、データの整合性の問題が発生し、効率的にデータをクエリして取得することが困難になります。
代替アプローチ: リレーショナル データ モデリング
推奨されるアプローチリレーショナル データを調べて、スキーマに適切な変更を加えることが必要です。これには、配列内のデータのさまざまな側面を表す別個のテーブルと列を作成することが含まれます。データを正規化すると、データの整合性が維持され、効率的なクエリと取得が容易になります。
シリアル化関数の使用
どうしても配列を 1 つのフィールドに格納する必要がある場合は、次のようにします。 Serialize() と unserialize() または json_encode() と json_decode() のようなシリアル化関数を使用できます。これらの関数は、配列を 1 つのフィールドに格納できる文字列に変換します。ただし、このアプローチには制限があります。
シリアル化されたデータの実際のコンテンツに対してクエリを実行することはできません。また、配列の複雑さに応じて、保存されるデータのサイズも増加します。
例: リレーショナル データ モデリング
次の PHP 配列について考えてみましょう:
$a = array( 1 => array( 'a' => 1, 'b' => 2, 'c' => 3 ), 2 => array( 'a' => 1, 'b' => 2, 'c' => 3 ), );
リレーショナル データ モデリングを使用してこの配列を MySQL に保存するには、次の内容で「test」という名前のテーブルを作成します。構造:
CREATE TABLE test ( id INTEGER UNSIGNED NOT NULL, a INTEGER UNSIGNED NOT NULL, b INTEGER UNSIGNED NOT NULL, c INTEGER UNSIGNED NOT NULL, PRIMARY KEY (id) );
次のようなクエリを使用して、配列からテーブルにデータを挿入します。
$query = "INSERT INTO test (id, a, b, c) VALUES ($k, $v['a'], $v['b'], $v['c'])";
テーブルからデータを取得するには、次のようなクエリを実行します。
$query = 'SELECT * FROM test'; $ret[array_shift($o)] = $o;
このアプローチにより、データの整合性を維持しながら、配列から特定の情報を効率的にクエリして取得することができます。
以上がMySQL データベースに配列を効果的に保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。