Heim > Datenbank > MySQL-Tutorial > Wie verbinde ich Tabellen effizient mit durch Kommas getrennten Werten?

Wie verbinde ich Tabellen effizient mit durch Kommas getrennten Werten?

Patricia Arquette
Freigeben: 2024-12-24 05:45:09
Original
996 Leute haben es durchsucht

How to Efficiently Join Tables with Comma-Separated Values?

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);
Nach dem Login kopieren

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';
Nach dem Login kopieren

Ü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);
Nach dem Login kopieren

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';
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage