在 MySQL 中儲存和擷取數組
由於關聯式資料規範化問題,不建議在單一 MySQL 欄位中儲存數組。但是,如果需要將陣列保存在單一欄位中,可以使用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 格式的陣列進行編碼和解碼。
替代方法:關係資料庫設計
不要將陣列儲存在單一欄位中,而是考慮重構資料庫架構以將陣列元素表示為相關表中的單獨記錄。這允許正確的關係建模和高效的查詢。
例如,考慮數組:
$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中文網其他相關文章!