Anda harus benar-benar melihat Normalisasi basis data
dan pertama-tama normalkan struktur Anda dengan menambahkan tabel persimpangan dan menyimpan relasi dari tablec setiap relasi yang disimpan di tablec akan disimpan di tabel persimpangan baru tetapi tidak sebagai daftar yang dipisahkan koma, setiap baris akan menyimpan id c dan satu id pengguna per baris, jika Anda tidak dapat mengubah skema Anda, Anda dapat menggunakan find_in_set
untuk menemukan nilai dalam set
select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Edit untuk menormalkan skema
Saya telah menghapus userids
kolom dari tblC
. Anda dan sebagai gantinya saya telah membuat tabel persimpangan baru sebagai tblC_user
dengan 2 kolom c_id
ini akan terkait dengan kolom id tblC
dan yang kedua userids
untuk menyimpan pengguna hubungan pengguna untuk tblC
lihat contoh skema untuk tblC
CREATE TABLE if not exists tblC
(
id int(11) NOT NULL auto_increment ,
nname varchar(255),
PRIMARY KEY (id)
);
INSERT INTO tblC (id, nname) VALUES
('1', 'new1'),
('2', 'new2'),
('3', 'new3'),
('4', 'new4'),
('5', 'new5');
Dan inilah tabel persimpangan Anda sebagai tblC_user
CREATE TABLE if not exists tblC_user
(
c_id int,
userid int
);
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');
Di atas jika Anda perhatikan saya belum menyimpan hubungan yang dipisahkan koma, setiap hubungan pengguna untuk tblC
disimpan di baris baru, untuk Anda yang bersangkutan, set hasil saya telah menggunakan tabel persimpangan di gabung juga permintaan baru akan seperti di bawah ini
select *
from tblC c
join tblC_user cu on(c.id = cu.c_id)
join tblB b on (b.userid = cu.userid)
where c.nname="new1"
Sekarang kueri di atas dapat dioptimalkan dengan menggunakan indeks, Anda dapat mempertahankan hubungan berjenjang dengan mudah