Dovresti davvero guardare a Normalizzazione del database
e prima normalizza la tua struttura aggiungendo una tabella di giunzione e contiene una relazione da tablec ogni relazione memorizzata in tablec verrà archiviata nella nuova tabella di giunzione ma non come un elenco separato da virgole ogni riga conterrà l'id di c e un ID utente per riga, se tu non puoi modificare il tuo schema puoi usare find_in_set
per trovare i valori nel set
select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Modifica per normalizzare lo schema
Ho rimosso userids
colonna dal tuo tblC
e invece ho creato una nuova tabella di giunzione come tblC_user
con 2 colonne c_id
questo sarà correlato alla colonna id di tblC
e il secondo userid
per memorizzare gli utenti delle relazioni utente per tblC
vedere lo schema di esempio per 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');
Ed ecco la tua tabella di giunzione come 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');
In alto se noti che non ho memorizzato alcuna relazione separata da virgole ogni relazione di utente per tblC
è memorizzato in una nuova riga, per te il set di risultati che ti interessa ho usato la tabella di giunzione in join anche la nuova query sarà come di seguito
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"
Ora la query sopra può essere ottimizzata utilizzando indici che puoi mantenere facilmente relazioni a cascata