Tabellen mit durch Kommas getrennten Spalten verknüpfen
Beim Verknüpfen von Tabellen, in denen eine Spalte durch Kommas getrennte Werte enthält, kann es schwierig sein, passende Datensätze zu finden. Um dieses Problem zu lösen, besteht ein praktikabler Ansatz darin, die Funktion find_in_set zu verwenden.
Beispielabfrage mit find_in_set
Angenommen, wir haben das folgende Schema:
CREATE TABLE tblC ( id INT NOT NULL AUTO_INCREMENT, nname VARCHAR(255), userids VARCHAR(255), PRIMARY KEY (id) ); CREATE TABLE tblB ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(255), userid INT, PRIMARY KEY (id) ); INSERT INTO tblC (nname, userids) VALUES ('new1', '1,2'), ('new2', '1,3'), ('new3', '1,4'), ('new4', '3,2'), ('new5', '5,2'); INSERT INTO tblB (username, userid) VALUES ('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5);
Um bei der Suche nach „new1“ alle Benutzernamen zu finden, können wir Folgendes verwenden query:
SELECT * FROM tblC AS c JOIN tblB AS b ON (find_in_set(b.userid, c.userids) > 0) WHERE c.nname = 'new1';
Überlegungen zur Normalisierung
Es ist jedoch wichtig zu beachten, dass das Speichern von durch Kommas getrennten Werten in einer einzelnen Spalte als Verstoß gegen die Prinzipien der Datenbanknormalisierung angesehen wird. Ein besserer Ansatz wäre, eine separate Verbindungstabelle zu haben, um die Benutzerzuordnungen für jede Zeile in tblC zu speichern. Dies würde die Notwendigkeit von find_in_set überflüssig machen und effizientere Abfragen ermöglichen.
Normalisiertes Schemabeispiel
CREATE TABLE tblC ( id INT NOT NULL AUTO_INCREMENT, nname VARCHAR(255), PRIMARY KEY (id) ); CREATE TABLE tblC_user ( c_id INT, userid INT, PRIMARY KEY (c_id, userid) ); INSERT INTO tblC (nname) VALUES ('new1'), ('new2'), ('new3'), ('new4'), ('new5'); INSERT INTO tblC_user (c_id, userid) VALUES (1, 1), (1, 2), (2, 1), (2, 3), (3, 1), (3, 4), (4, 3), (4, 2), (5, 5), (5, 2);
Abfrage mit normalisiertem Schema
SELECT * FROM tblC AS c JOIN tblC_user AS cu ON (c.id = cu.c_id) JOIN tblB AS b ON (b.userid = cu.userid) WHERE c.nname = 'new1';
Durch die Verwendung eines normalisierten Schemas optimieren wir die Abfrageleistung und stellen die Datenintegrität sicher, indem wir Duplikate oder Inkonsistenzen eliminieren Beziehungen.
Das obige ist der detaillierte Inhalt vonWie verbinde ich Tabellen effizient mit durch Kommas getrennten Werten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!