لا يمكنك استخدام عمود بقيمة RAND() في عبارة ORDER BY لأن ORDER BY سيقوم بإعادة حساب العمود عدة مرات. ومع ذلك، في MySQL3.23، يمكنك القيام بما يلي: SELECT * FROM table_name ORDER BY RAND()، وهو أمر مفيد للحصول على SELECT * FROM table1,table2 WHERE a=b AND c لتحقيق العشوائية. لقد وجدت ما يلي من الدليل بيان لإكمال المهمة:
حدد * من table_name ORDER BY rand() LIMIT 5؛
راند يقول هذا في الدليل::
راند()
راند (ن)
إرجاع قيمة النقطة العائمة العشوائية في النطاق من 0 إلى 1.0. إذا تم تحديد معلمة عدد صحيح N، فسيتم استخدامها كقيمة أولية.
الخلية> حدد RAND();
-> 0.5925
الخلية> حدد RAND(20);
-> 0.1811
الخلية> حدد RAND(20);
-> 0.1811
الخلية> حدد RAND();
-> 0.2079
الخلية> حدد RAND();
-> 0.7888
لا يمكنك استخدام عمود بقيمة RAND() في عبارة ORDER BY لأن ORDER BY سيقوم بإعادة حساب العمود عدة مرات. ومع ذلك، في MySQL3.23، يمكنك القيام بما يلي: SELECT * FROM table_name ORDER BY RAND()، وهو أمر مفيد للحصول على SELECT * FROM table1,table2 WHERE a=b AND c
لاحظ أنه سيتم إعادة تقييم RAND() في جملة WHERE في كل مرة يتم فيها تنفيذ WHERE.
لكنني جربت ذلك بالنسبة لجدول يحتوي على 8000 سجل، يستغرق التنفيذ مرة واحدة 0.08 ثانية، وهو أمر بطيء بعض الشيء. لاحقًا، استشرت Google وحصلت على الكود التالي:
SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
تتطلب كفاءة التنفيذ 0.02 ثانية، ولسوء الحظ، فقط mysql 4.1.* وما فوق يدعم مثل هذه الاستعلامات الفرعية.