सबसे पहले मैं आपके प्रश्न में एक त्रुटि सुधारना चाहता हूं। आपके प्रश्नों में आपका मतलब _
. है नहीं %
. %
का अर्थ है किसी भी संख्या में वर्ण (शून्य या अधिक)। _
का उपयोग करें मतलब बिल्कुल एक वर्ण।
अब समाधान पर ... आपको वास्तव में डेटाबेस में संग्रहीत सॉर्ट किए गए शब्द की आवश्यकता नहीं है। आप बस यह कर सकते हैं:
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 6
AND word LIKE '%W%'
AND word LIKE '%O%'
AND word LIKE '%R%'
AND word LIKE '%D%'
यदि आपके इनपुट में डुप्लिकेट अक्षर हैं, तो यह सुनिश्चित करने के लिए कि सभी परिणामों में सभी डुप्लीकेट अक्षर हैं, इसे सही ढंग से संभालने की आवश्यकता है। उदाहरण के लिए यदि इनपुट FOO__
. है आपको यह जांचना होगा कि प्रत्येक शब्द %F%
both दोनों से मेल खाता है और %O%O%
।
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND word LIKE '%F%'
AND word LIKE '%O%O%'
ध्यान दें कि इस दृष्टिकोण के लिए तालिका के पूर्ण स्कैन की आवश्यकता होगी, इसलिए यह विशेष रूप से कुशल नहीं होगा। आप प्रत्येक शब्द की लंबाई को एक अलग कॉलम में संग्रहीत करके और उस कॉलम को अनुक्रमित करके चीजों को थोड़ा सुधार सकते हैं।
अगर आपके पास sortedword
. है तो आप %
. को छोड़ कर प्रदर्शन में सुधार कर सकते हैं डुप्लिकेट अक्षरों के बीच क्योंकि आप जानते हैं कि वे लगातार sortedword
. में दिखाई देंगे . यह प्रदर्शन में सुधार कर सकता है क्योंकि यह असफल मैचों के लिए आवश्यक बैकट्रैकिंग की मात्रा को कम करता है।
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%'
AND sortedword LIKE '%OO%'
एक अन्य दृष्टिकोण जिसके लिए sortedword
requires की आवश्यकता होती है उपस्थित होना इस प्रकार है:
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%D%O%R%W%'
फिर से इसके लिए तालिका के पूर्ण स्कैन की आवश्यकता होती है। दोबारा, यदि आपके पास दोहराए गए पत्र हैं तो आपको %
. की आवश्यकता नहीं है उनके बीच।
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%OO%'