Наистина трябва да погледнете Нормализиране на базата данни
и първо нормализирайте структурата си, като добавите съединителна таблица и съдържа релация от tablec, всяка релация, съхранена в tablec, ще бъде съхранена в нова съединителна таблица, но не като списък, разделен със запетая, всеки ред ще съдържа id на c и един потребителски id на ред, ако вие не може да промени вашата схема, можете да използвате find_in_set
за намиране на стойности в набор
select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Редактиране за нормализиране на схема
Премахнах userids
колона от вашия tblC
и вместо това създадох нова съединителна таблица като tblC_user
с 2 колони c_id
това ще бъде свързано с колоната id на tblC
и второ userid
за съхраняване на потребителски връзки за tblC
вижте примерна схема за 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');
И ето вашата съединителна таблица като 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');
По-горе, ако забележите, не съм съхранил никакви релации, разделени със запетая, всяка релация на потребител за tblC
се съхранява в нов ред, за съответния набор от резултати използвах съединителна таблица в присъединяването, също така новата заявка ще бъде като по-долу
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"
Сега заявката по-горе може да бъде оптимизирана чрез използване на индекси, които можете лесно да поддържате каскадни връзки