myisam तालिकाओं के लिए आप प्राकृतिक भाषा पूर्ण-पाठ खोज का उपयोग कर सकते हैं:http://dev.mysql.com/doc/refman/5.5/hi/fulltext-natural-language.html
SELECT * FROM article a
LEFT JOIN articletag at ON (at.articleid = a.articleid)
LEFT JOIN tag t ON (at.tagid = t.tagid)
WHERE MATCH (a.title) AGAINST ('some title' IN NATURAL LANGUAGE MODE)
OR MATCH (t.tagtext) AGAINST ('some tag' IN NATURAL LANGUAGE MODE)
GROUP BY a.articleid # if you don't want get duplicates
आप एक फ़ील्ड में टैग के बारे में अनावश्यक जानकारी जोड़ने के बारे में भी सोच सकते हैं (उदा. <taga><tagb><tagz>
) लेख तालिका में और हर बार टैग जोड़े/हटाए जाने पर इसे अपडेट करें। यह क्वेरी को सरल करेगा और यह तेज़ होना चाहिए:
SELECT * FROM article a
WHERE MATCH (a.title, a.tagtext) AGAINST ('some title or tag' IN NATURAL LANGUAGE MODE)