Heim >Datenbank >MySQL-Tutorial >Wie kann ich Array-Daten in MySQL effizient speichern und abfragen?
Speichern von Arrays in MySQL: Ein alternativer Ansatz
Die Frage, wie man ein Array von Daten in einem einzelnen MySQL-Feld speichern kann, bereitet seit langem Rätsel auf Entwickler. Während serialize() und unserialize() möglicherweise eine Lösung bieten, beeinträchtigt dies die Abfragebarkeit.
Untersuchen der relationalen Daten
Der beste Ansatz zum Speichern von Arrays in MySQL liegt in der Untersuchung die relationalen Daten und die entsprechende Änderung des Schemas. Anstatt zu versuchen, ein Array in ein einzelnes Feld zu packen, sollten Sie erwägen, eine Tabelle zu erstellen, die den Inhalt des Arrays aufnehmen kann.
Beispieltabellenstruktur
Nehmen wir zum Beispiel an, wir haben ein Array verschachtelter Arrays:
$a = array( 1 => array( 'a' => 1, 'b' => 2, 'c' => 3 ), 2 => array( 'a' => 1, 'b' => 2, 'c' => 3 ), );
In diesem Fall würden wir eine Tabelle wie erstellen Dies:
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) );
Einfügen und Abrufen von Datensätzen
Um das Array in der Tabelle zu speichern, können wir eine Einfügeabfrage verwenden:
foreach ($t as $k => $v) { $query = "INSERT INTO test (id," . implode(',', array_keys($v)) . ") VALUES ($k," . implode(',', $v) . ")"; $r = mysql_query($query,$c); }
Um die Datensätze abzurufen, können wir eine Auswahlabfrage verwenden:
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; }
Dieser Ansatz ermöglicht eine einfache Abfrage und Bearbeitung von die Array-Daten innerhalb der Datenbank.
Das obige ist der detaillierte Inhalt vonWie kann ich Array-Daten in MySQL effizient speichern und abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!