तार्किक रूप से आप जो चाहते हैं वह करना संभव नहीं है, मैं आपको ऑर्डर विकल्प का उपयोग करके समझाने की कोशिश करूंगा
ORDER BY FIELD(`question_level`, 1, 2, 1, 2, 3, 2, 4, 2, 3, 3)
तो यहाँ हम चाहते हैं 1
फिर 2
फिर 1
question_level
. के पुन:. अब तालिका में हमारे पास ये मान हैं। मैं केवल प्रश्न_स्तर # 1 के साथ स्वयं को चिंतित करूंगा जो मुझे अपनी बात दिखाने के लिए आवश्यक है।
id | question | question_level
______________________________________
1 | abc | 1
______________________________________
5 | qoindos | 1
______________________________________
जैसा कि आप देख सकते हैं कि हमारे पास question_level=1
. के लिए पंक्तियां हैं अब सिस्टम कैसे तय करेगा कि कौन सा लेवल 1
पहला है और जो दूसरा है। यह कैसे करना है यह तय करने का कोई तरीका नहीं है। तो डेटाबेस को जिस तरह से आप चाहते हैं उसे सॉर्ट करने में विफल होने के बावजूद। उस विकल्प को बनाने के लिए अधिक जानकारी के बिना, इसे क्रमबद्ध करने के लिए भी लूप बनाने का कोई तरीका नहीं है। आप जो सबसे अच्छा कर सकते हैं वह प्राथमिक कुंजी और फिर स्तर द्वारा क्रमबद्ध है। जिसकी आपको सबसे अधिक संभावना सर्वर साइड से करनी होगी।
मुझे लगता है कि आपने यहां जो गलती की है, आपको वास्तविक विशिष्ट आईडी के प्रश्नों का उपयोग करने की आवश्यकता है, यदि आपके पास प्रत्येक स्तर पर कितने प्रश्नों की सीमा है तो उसे अलग से संबोधित करने की आवश्यकता है।
उम्मीद है कि यह समझ में आता है।
यदि आप x
. को चुनने का प्रयास कर रहे थे n
. पर यादृच्छिक प्रश्नों की संख्या जिस स्तर पर काफी आसानी से काम किया जा सकता है। उदाहरण के लिए यदि आप चाहते थे
- एलवी 1 पर 2x प्रश्न
- एलवी 2 पर 4x प्रश्न
- एलवी 3 पर 3x प्रश्न
- एलवी 4 पर 1x प्रश्न।
यह स्तर के लिए चार सरल प्रश्नों के साथ काम किया जा सकता है, जबकि आईडी फ़ील्ड पर यादृच्छिक रूप से सॉर्ट करना और उस स्तर के लिए उपयुक्त सीमा खंड का उपयोग करना। वैसे, ये आपके प्रश्न में स्तरों की संख्या हैं।
यदि आप किसी दिए गए स्तर पर यादृच्छिक प्रश्नों का चयन करना चाहते हैं, तो आप इसे सबक्वायरी के साथ करना चाह सकते हैं। RAND()
कुछ प्रदर्शन दंड हैं जिन्हें आप प्राथमिक कुंजी को यादृच्छिक रूप से चारों ओर स्कर्ट करने में सक्षम होना चाहिए और फिर आदेश देने के बाद शेष डेटा को बाहर निकालने के लिए टेबल पर शामिल होना चाहिए। लेकिन, आपको इसे बेंचमार्क करना चाहिए।
तो इसका एक उदाहरण यह होगा।
SELECT
q1.*
FROM
tbl_questions AS q1
JOIN
(
SELECT
id
FROM
tbl_questions
WHERE
question_level = 1
ORDER BY RAND() LIMIT 2
) AS q2 USING( id )
हालांकि मुझे यह स्वीकार करना होगा कि मैंने इसे केवल एक विचार के रूप में आजमाया नहीं है।