2013-07-22 11 views
5

मेरे पास "टैग" नामक फ़ील्ड के साथ मेरे डेटाबेस में एक टेबल है, उदा। आईओएस, एंड्रॉइड, जावा, जावास्क्रिप्ट, आदि .. और मैं इस तालिका में सभी आइटमों को चुनना चाहता हूं, जो कुछ टैग से मेल खाते हैं, उदाहरण के लिएMySQL "पसंद" (झूठी सकारात्मक)

आईडी | नाम | टैग

- | ------- | -----

1 | नाम 1 | आईओएस, एंड्रॉइड

2 | नाम 2 | जावास्क्रिप्ट, सीएसएस

3 | नाम 3 | एचटीएमएल, जावा

अब

, अगर मैं केवल आइटम जो टैग 'जावा', मैं यह नहीं (आईडी = 3 के साथ केवल एक है) हैं:

SELECT * FROM posts WHERE tags LIKE '%Java%'; 

लेकिन, जैसा कि आप कल्पना , यह मुझे दूसरा (जावास्क्रिप्ट) और तीसरा (जावा) आइटम देता है ..

मैं केवल तीसरे स्थान पर लौटने के लिए कैसे कर सकता हूं?

+2

'चयन करें * टैग से' टैग 'जैसे टैग' ' –

+2

कई से अधिक रिश्तों के लिए Google – zerkms

+0

आपको इसके बजाय संबंध तालिका का उपयोग करना चाहिए, और अपने उत्तर के लिए अपने 'पसंद' खंड को – Raptor

उत्तर

14

MySQL में, सबसे अच्छा समाधान find_in_set() है:

SELECT * 
FROM posts 
WHERE find_in_set('Java', tags) > 0; 

MySQL और अन्य डेटाबेस में, आप भी like साथ ऐसा कर सकते हैं, लेकिन आप सब कुछ के आसपास सीमांकक रखना होगा:

SELECT * 
FROM posts 
WHERE concat(',', tags, ',') like '%,Java,%'; 

इसी तरह के टैग के साथ सीमित रोकथाम भ्रम (अच्छी तरह से, भ्रम जिसमें अल्पविराम शामिल नहीं है)।

+0

मैं बस सोच रहा हूं कि 'LIKE'% Java% 'और 'concat (', ', टैग,', '' जैसे '%, Java,%' के बीच वास्तव में क्या अंतर है;'। धन्यवाद। –

+2

@ क्रिस्टियनमार्क। । । पहला 'जावास्क्रिप्ट' से मेल खाएगा। दूसरा नहीं होगा। –

संबंधित मुद्दे