आप position, rand()
. के आधार पर छाँट सकते हैं ताकि प्रत्येक position
. के भीतर एक यादृच्छिक क्रम हो विभाजन। फिर position
. के रिकॉर्ड की गणना करने के लिए वेरिएबल का उपयोग करें विभाजन:
SELECT q_id, position, qtn, level, rn
FROM (
SELECT q_id, position, qtn, level,
@rn := IF(@pos = position, @rn + 1,
IF(@pos := position, 1, 1)) AS rn
FROM (
SELECT *
FROM tbl_question
WHERE level = '1'
ORDER BY position, rand() ) a
CROSS JOIN (SELECT @rn := 0, @pos := 0) AS vars ) b
WHERE b.rn <= 2
ORDER BY position
बाहरी क्वेरी @rn
. का उपयोग करती है प्रत्येक position
. से केवल दो रिकॉर्ड चुनने के लिए विभाजन।