मेरे पास 6 कॉलम वाली एक टेबल है जिसमें आइटम (और डेटा वाले अन्य कॉलम) हैं। जब मैं (गेम) डेटा संग्रहीत करता हूं तो वस्तुओं का क्रम महत्वपूर्ण होता है। लेकिन अब मैं एक प्रश्न करना चाहता हूं जहां आदेश प्रासंगिक नहीं है, बस उपयोगकर्ता ने वस्तुओं के विशिष्ट संयोजन का उपयोग किया है।

संपादित करें: मैं सभी परिणाम चाहता हूं जहां एक विशिष्ट चरित्र (सीआईडी) ने एक गेम में आइटम 1,2,3,... का उपयोग किया है। यह महत्वपूर्ण नहीं है कि खिलाड़ी किसी आइटम को पहले आइटम (आइटम 1) या अंतिम के रूप में उपयोग करता है।

id  |cID  |item1   |item2   |item3   
 1  | 5   | 3      | 1      | 0      
 2  | 1   | 4      | 2      | 1      
 3  | 2   | 1      | 3      | 2
 4  | 2   | 2      | 2      | 2

वर्तमान में क्वेरी इस तरह दिखती है:

SELECT *
FROM   userdata 
WHERE  item1 IN (1,2,3) 
AND    item2 IN (1,2,3) 
AND    item3 IN (1,2,3) 
AND    cID = 2

लेकिन फिर मुझे परिणामों को फ़िल्टर करना होगा। इस उदाहरण में मुझे केवल आईडी 3 चाहिए लेकिन आईडी 3 और आईडी 4 प्राप्त करें।

क्या इसे सीधे क्वेरी के साथ करने का कोई तरीका है?

0
Kartoffelkultur 5 सितंबर 2021, 10:43

2 जवाब

सबसे बढ़िया उत्तर

एक आसान समाधान होगा:

SELECT *
FROM   userdata 
WHERE  item1 IN (1,2,3) 
AND    item2 IN (1,2,3) AND item2 NOT IN (item1)
AND    item3 IN (1,2,3) AND item3 NOT IN (item1, item2)
AND    cID = 2

लेकिन शायद एक और अधिक सुरुचिपूर्ण तरीका है।

0
C14L 5 सितंबर 2021, 08:26

यदि वस्तुओं का क्रम स्पष्ट नहीं है, और आप वहां विभिन्न मदों का चयन करना चाहते हैं, तो आप यह कर सकते हैं:

SELECT *
FROM   userdata 
WHERE  item1 IN (1,2,3) 
AND    item2 IN (1,2,3) and item2<>item1
AND    item3 IN (1,2,3) and item3<>item1 and item3<>item2
AND    cID = 2;

यह एक पंक्ति का चयन करेगा जहां आइटम 1,2 और 3 मौजूद हैं, और अब उस पंक्ति का चयन नहीं करेंगे जहां आपके पास केवल 2 मान वाले आइटम हैं।

नोट: यह एक निष्पादक समाधान नहीं होगा। केवल अगर आप ऑर्डर की गई वस्तुओं का उपयोग करते हैं (जैसा कि टिप्पणियों में @Naktibalda द्वारा सुझाया गया था) तो आपको अधिक प्रदर्शन करने वाला समाधान मिल सकता है।

DBFIDDLE

0
Luuk 5 सितंबर 2021, 08:32