Menyimpan dan Mendapatkan Tatasusunan dalam MySQL
Menyimpan tatasusunan dalam satu medan MySQL tidak disyorkan kerana isu penormalan data hubungan. Walau bagaimanapun, jika menyimpan tatasusunan dalam satu medan adalah perlu, fungsi serialize() dan unserialize() boleh digunakan.
Untuk menyimpan tatasusunan ($a) ke dalam medan MySQL, tukarkannya kepada rentetan menggunakan 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;}}'
Kemudian, masukkan nilai bersiri ke dalam pangkalan data.
Untuk mendapatkan semula tatasusunan daripada pangkalan data, pertanyaan untuk medan dan tukar rentetan yang disimpan kembali kepada tatasusunan menggunakan unserialize():
$query = "SELECT my_array_field FROM my_table"; $result = mysql_query($query); $row = mysql_fetch_assoc($result); $a = unserialize($row['my_array_field']);
Sebagai alternatif, json_encode() dan json_decode() boleh digunakan untuk mengekod dan menyahkod tatasusunan daripada format JSON, masing-masing.
Pendekatan Alternatif: Pangkalan Data Perhubungan Reka bentuk
Daripada menyimpan tatasusunan dalam satu medan, pertimbangkan untuk menstruktur semula skema pangkalan data anda untuk mewakili elemen tatasusunan sebagai rekod individu dalam jadual berkaitan. Ini membolehkan pemodelan hubungan yang betul dan pertanyaan yang cekap.
Sebagai contoh, pertimbangkan tatasusunan:
$a = [ 1 => [ 'a' => 1, 'b' => 2, 'c' => 3 ], 2 => [ 'a' => 1, 'b' => 2, 'c' => 3 ], ];
Anda boleh mencipta jadual berasingan untuk kunci tatasusunan dan nilai:
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) );
Kemudian, masukkan elemen tatasusunan ke dalam jadual masing-masing:
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);
Pendekatan ini membolehkan pertanyaan yang cekap dan manipulasi data tatasusunan dalam pangkalan data hubungan.
Atas ialah kandungan terperinci Bagaimana untuk Menyimpan dan Mengambil Tatasusunan dengan Cekap dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!