Menyertakan Jadual dengan Lajur Dipisahkan Koma
Apabila menyertai jadual di mana satu lajur mengandungi nilai dipisahkan koma, mencari rekod yang sepadan boleh menjadi mencabar. Untuk menyelesaikan isu ini, pendekatan yang berdaya maju ialah menggunakan fungsi find_in_set.
Contoh Pertanyaan dengan find_in_set
Andaikan kita mempunyai skema berikut:
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);
Untuk mencari semua nama pengguna semasa mencari "new1", kita boleh menggunakan yang berikut pertanyaan:
SELECT * FROM tblC AS c JOIN tblB AS b ON (find_in_set(b.userid, c.userids) > 0) WHERE c.nname = 'new1';
Pertimbangan Normalisasi
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa menyimpan nilai yang dipisahkan koma dalam satu lajur dianggap sebagai pelanggaran prinsip normalisasi pangkalan data. Pendekatan yang lebih baik ialah mempunyai jadual simpang yang berasingan untuk memegang persatuan pengguna bagi setiap baris dalam tblC. Ini akan menghapuskan keperluan untuk find_in_set dan membolehkan pertanyaan yang lebih cekap.
Sampel Skema Dinormalkan
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);
Pertanyaan dengan Skema Dinormalisasi
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';
Dengan menggunakan skema ternormal, kami mengoptimumkan prestasi pertanyaan dan memastikan data integriti dengan menghapuskan hubungan pendua atau tidak konsisten.
Atas ialah kandungan terperinci Bagaimana untuk Menyertai Jadual dengan Cekap dengan Nilai Dipisahkan Koma?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!