Datensätze mit mehreren Werten in einer Spalte suchen
In einer relationalen Datenbank ist es üblich, mehrere Werte in einer einzelnen Spalte zu speichern. Beim Abfragen von Daten mit solchen Spalten kann es jedoch schwierig sein, bestimmte Werte zu isolieren. Lassen Sie uns ein Szenario untersuchen, in dem wir eine Tabelle mit einer Spalte „Kinder“ haben, die mehrere durch Kommas getrennte Namen enthält.
Problem:
Betrachten Sie die folgende Tabelle:
id | name | children |
---|---|---|
1 | Roberto | Michael,Dia |
2 | Maria | John,Alex |
3 | Mary | Alexandre,Diana |
Das Ziel besteht darin, den Elternteil zu finden, der ein Kind namens Alex hat. Obwohl die Verwendung von „WHERE children = ‚Alex‘“ ideal wäre, schlägt dies aufgrund der mehreren Namen in jeder Zelle fehl. Durch die Verwendung von „WHERE children LIKE ‚%Alex%‘“ werden zusätzliche nicht verwandte Übereinstimmungen zurückgegeben.
Normalisiertes Schema:
Um dieses Problem zu beheben, kann das Tabellenschema durch Erstellen normalisiert werden eine separate Tabelle für Kinder mit einer Zeile für jedes Kind. Die ursprüngliche Tabelle kann dann mit der untergeordneten Tabelle verknüpft werden, um die übergeordnete Tabelle mit einem bestimmten untergeordneten Element zu finden. Wenn diese Lösung jedoch nicht machbar ist, gibt es eine Alternative:
FIND_IN_SET-Funktion:
Die MySQL-Funktion FIND_IN_SET() kann verwendet werden, um zu überprüfen, ob ein bestimmter Wert vorliegt ist in einer durch Kommas getrennten Liste vorhanden. Für dieses Szenario würde die Abfrage wie folgt lauten:
WHERE FIND_IN_SET('Alex', children)
Diese Abfrage gibt die Zeilen zurück, in denen „Alex“ in der Spalte „Kinder“ gefunden wird.
Das obige ist der detaillierte Inhalt vonWie kann ich Datensätze mit mehreren Werten in einer einzelnen Datenbankspalte effizient finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!