Du bør virkelig se på Databasenormalisering
og normaliser først din struktur ved at tilføje en forbindelsestabel og beholder en relation fra tablec, hver relation gemt i tablec vil blive gemt i en ny forbindelsestabel, men ikke som kommasepareret liste, hver række vil indeholde id af c og et bruger-id pr. række, hvis du kan ikke ændre dit skema, du kan bruge find_in_set
for at finde værdier i sæt
select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Rediger til normaliseringsskema
Jeg har fjernet userids
kolonne fra din tblC
og i stedet har jeg oprettet en ny junction-tabel som tblC_user
med 2 kolonner c_id
dette vil relatere til id-kolonnen i tblC
og en anden userid
for at gemme brugerrelationsbrugere for tblC
se eksempelskema for 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');
Og her er din junction-tabel 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');
I ovenstående, hvis du bemærker, at jeg ikke har gemt nogen kommaseparerede relationer for hver brugerrelation for tblC
er gemt i en ny række, for dit berørte resultatsæt har jeg brugt junction table i join også ny forespørgsel vil være som nedenfor
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 ovenstående forespørgsel optimeres ved at bruge indekser, du kan nemt vedligeholde kaskaderelationer