Maison >base de données >tutoriel mysql >Comment stocker et récupérer efficacement des tableaux dans MySQL ?

Comment stocker et récupérer efficacement des tableaux dans MySQL ?

DDD
DDDoriginal
2024-12-03 00:15:11701parcourir

How to Efficiently Store and Retrieve Arrays in MySQL?

Stockage et récupération de tableaux dans MySQL

Le stockage de tableaux dans un seul champ MySQL n'est pas recommandé en raison de problèmes de normalisation des données relationnelles. Cependant, si l'enregistrement d'un tableau dans un seul champ est nécessaire, les fonctions serialize() et unserialize() peuvent être utilisées.

Pour enregistrer un tableau ($a) dans un champ MySQL, convertissez-le en chaîne en utilisant 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;}}'

Ensuite, insérez la valeur sérialisée dans la base de données.

Pour récupérer le tableau de la base de données, recherchez le champ et convertissez la chaîne stockée revenir à un tableau en utilisant unserialize() :

$query = "SELECT my_array_field FROM my_table";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$a = unserialize($row['my_array_field']);

Alternativement, json_encode() et json_decode() peuvent être utilisés pour encoder et décoder des tableaux au format JSON, respectivement.

Approche alternative : conception de bases de données relationnelles

Au lieu de stocker des tableaux dans un seul champ, envisagez restructurer le schéma de votre base de données pour représenter les éléments du tableau sous forme d'enregistrements individuels dans des tables associées. Cela permet une modélisation relationnelle appropriée et des requêtes efficaces.

Par exemple, considérons le tableau :

$a = [
    1 => [
        'a' => 1,
        'b' => 2,
        'c' => 3
    ],
    2 => [
        'a' => 1,
        'b' => 2,
        'c' => 3
    ],
];

Vous pouvez créer des tables séparées pour les clés et les valeurs du tableau :

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

Ensuite, insérez les éléments du tableau dans les tables respectives :

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

Cette approche permet une interrogation et une manipulation efficaces des données du tableau dans une base de données relationnelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn