Du borde verkligen titta på Databasnormalisering
och normalisera först din struktur genom att lägga till en korsningstabell och håller en relation från tablec varje relation lagrad i tablec kommer att lagras i en ny korsningstabell men inte som kommaseparerad lista varje rad kommer att innehålla id för c och ett användar-id per rad, om du kan inte ändra ditt schema kan du använda find_in_set
för att hitta värden i set
select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Redigera för normaliseringsschema
Jag har tagit bort userids
kolumn från din tblC
och istället har jag skapat en ny korsningstabell som tblC_user
med 2 kolumner c_id
detta kommer att relateras till id-kolumnen för tblC
och den andra userid
för att lagra användarrelationer för tblC
se exempelschema för 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');
Och här är din korsningstabell som 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');
Ovan om du märker att jag inte har lagrat några kommaseparerade relationer för varje användarrelation för tblC
lagras i ny rad, för din berörda resultatuppsättning har jag använt junction-tabellen i join också ny fråga kommer att se ut som nedan
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"
Nu kan ovanstående fråga optimeras genom att använda index, du kan enkelt upprätthålla kaskadrelationer