Realmente debería mirar Normalización de la base de datos
y primero normalice su estructura agregando una tabla de unión y mantenga una relación de tablec cada relación almacenada en tablec se almacenará en la nueva tabla de unión pero no como una lista separada por comas cada fila contendrá la identificación de c y una identificación de usuario por fila, si no puede alterar su esquema, puede usar find_in_set
para encontrar valores en el conjunto
select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Editar para normalizar el esquema
He eliminado userids
columna de su tblC
y en su lugar, he creado una nueva tabla de unión como tblC_user
con 2 columnas c_id
esto estará relacionado con la columna de identificación de tblC
y el segundo userid
para almacenar usuarios de relaciones de usuario para tblC
ver esquema de muestra 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');
Y aquí está su tabla de unión 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');
Arriba, si nota que no he almacenado ninguna relación separada por comas, cada relación de usuario para tblC
se almacena en una nueva fila, para su conjunto de resultados en cuestión, he usado la tabla de unión en la unión, también la nueva consulta será como a continuación
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"
Ahora, la consulta anterior se puede optimizar mediante el uso de índices, puede mantener relaciones en cascada fácilmente