ホームページ > データベース > mysql チュートリアル > MySQL で配列を効率的に保存および取得するにはどうすればよいですか?

MySQL で配列を効率的に保存および取得するにはどうすればよいですか?

DDD
リリース: 2024-12-03 00:15:11
オリジナル
693 人が閲覧しました

How to Efficiently Store and Retrieve Arrays in MySQL?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート