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

MySQL で配列データを効率的に保存およびクエリするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-29 01:04:111010ブラウズ

How Can I Efficiently Store and Query Array Data in MySQL?

MySQL への配列の保存: 代替アプローチ

単一の MySQL フィールドにデータの配列を保存する方法の問題は、長い間困惑していました。開発者。 Serialize() と unserialize() は解決策を提供する可能性がありますが、クエリ性が犠牲になります。

リレーショナル データの調査

MySQL に配列を格納する最良のアプローチは、調査することです。リレーショナル データを取得し、それに応じてスキーマを変更します。配列を 1 つのフィールドに詰め込む代わりに、配列の内容を収容できるテーブルを作成することを検討してください。

テーブル構造の例

たとえば、次のようにするとします。ネストされた配列の配列がある:

$a = array(
    1 => array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    ),
    2 => array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    ),
);

この場合、次のようなテーブルを作成します。 this:

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)
);

レコードの挿入と取得

テーブルに配列を格納するには、挿入クエリを使用できます:

foreach ($t as $k => $v) {
    $query = "INSERT INTO test (id," .
            implode(',', array_keys($v)) .
            ") VALUES ($k," .
            implode(',', $v) .
            ")";
    $r = mysql_query($query,$c);
}

レコードを取得するには、選択クエリを使用できます:

function getTest() {
    $ret = array();
    $c = connect();
    $query = 'SELECT * FROM test';
    $r = mysql_query($query, $c);
    while ($o = mysql_fetch_array($r, MYSQL_ASSOC)) {
        $ret[array_shift($o)] = $o;
    }
    mysql_close($c);
    return $ret;
}

これこのアプローチにより、データベース内の配列データのクエリと操作が簡単になります。

以上がMySQL で配列データを効率的に保存およびクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。