Você deve realmente olhar para Normalização de banco de dados e primeiro normalize sua estrutura adicionando uma tabela de junção e mantenha uma relação de tablec cada relação armazenada em tablec será armazenada em uma nova tabela de junção, mas não como uma lista separada por vírgulas, cada linha conterá id de c e um id de usuário por linha, se você não pode alterar seu esquema você pode usar
find_in_set
para encontrar valores no conjunto select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Ver demonstração
Editar para normalizar esquema
Eu removi
userids
coluna do seu tblC
e, em vez disso, criei uma nova tabela de junção como tblC_user
com 2 colunas c_id
isso será relacionado à coluna id de tblC
e o segundo userid
para armazenar usuários de relações de usuário para tblC
veja o esquema de amostra para 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');
E aqui está sua tabela de junção como
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');
Acima, se você notar que não armazenei nenhuma relação separada por vírgula, cada relação de usuário para
tblC
é armazenado em uma nova linha, para você, o conjunto de resultados em questão eu usei a tabela de junção na junção e a nova consulta será como abaixo 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"
Demonstração 2
Agora, a consulta acima pode ser otimizada usando índices, você pode manter relações em cascata facilmente