आपको वास्तव में डेटाबेस सामान्यीकरण देखना चाहिए।
और पहले एक जंक्शन टेबल जोड़कर अपनी संरचना को सामान्य करें और टेबलसी से एक संबंध रखता है टेबलसी में संग्रहीत प्रत्येक संबंध नई जंक्शन तालिका में संग्रहीत किया जाएगा, लेकिन अल्पविराम से अलग सूची के रूप में नहीं, प्रत्येक पंक्ति में सी की आईडी और प्रति पंक्ति एक उपयोगकर्ता आईडी होगी, यदि आप आप अपने स्कीमा को नहीं बदल सकते जिसका आप उपयोग कर सकते हैं 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
यह 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"
अब उपरोक्त क्वेरी को इंडेक्स का उपयोग करके अनुकूलित किया जा सकता है जिससे आप आसानी से कैस्केडिंग संबंध बनाए रख सकते हैं