Vous devriez vraiment regarder Normalisation de la base de données
et normalisez d'abord votre structure en ajoutant une table de jonction et contient une relation de tablec chaque relation stockée dans tablec sera stockée dans une nouvelle table de jonction mais pas en tant que liste séparée par des virgules chaque ligne contiendra l'identifiant de c et un identifiant d'utilisateur par ligne, si vous ne peut pas modifier votre schéma, vous pouvez utiliser find_in_set
pour trouver des valeurs dans un ensemble
select *
from tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"
Modifier pour normaliser le schéma
J'ai supprimé les userids
colonne de votre tblC
et à la place j'ai créé une nouvelle table de jonction en tant que tblC_user
avec 2 colonnes c_id
cela sera lié à la colonne id de tblC
et le second userid
pour stocker les utilisateurs des relations utilisateur pour tblC
voir exemple de schéma pour 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');
Et voici votre table de jonction en tant que 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');
Ci-dessus, si vous remarquez que je n'ai pas stocké de relations séparées par des virgules, chaque relation d'utilisateur pour tblC
est stocké dans une nouvelle ligne, pour vous l'ensemble de résultats concerné, j'ai utilisé la table de jonction dans la jointure, la nouvelle requête sera comme ci-dessous
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"
Maintenant, la requête ci-dessus peut être optimisée en utilisant des index, vous pouvez facilement maintenir des relations en cascade