با چه دستوری میشه یه انتخاب رندم از سطرهای یک جدول در بانک mysql داشت ؟
یعنی در هر بار بازدید از صفحه خاص یک مقدار تصادفی از رکوردهای یک جدول رو به نمایش گذاشت ؟
Printable View
با چه دستوری میشه یه انتخاب رندم از سطرهای یک جدول در بانک mysql داشت ؟
یعنی در هر بار بازدید از صفحه خاص یک مقدار تصادفی از رکوردهای یک جدول رو به نمایش گذاشت ؟
با فرض این که نمی دونید چندتا رکورد در جدول تون وجود داره از این روش میتونید استفاده کنید:
[PHP]$result=mysql_query("select * from test");
$count=mysql_num_rows($result);
$random=rand(0,$count);
$result=mysql_query("select * from test limit $random,1"); [/PHP]
خود mysql بصورت درونی تابعی برای این منظور درنظر گرفته.
مثال بالا به اینصورت میشه:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]کد:SELECT * FROM tbl_name LIMIT RAND(), 1
فرمایش ایشون رو به این شکل تکمیل میکنم:نقل قول:
کد:select * from tbl_name order by rand() limit 1
به نظر من روشی که در پست #3 معرفی شد (به صورت اصلاح شده در پست #4) مناسبتره. البته ظاهراً در جدولهایی که تعداد رکورد خیلی زیاد دارند (در حد میلیون) این روش یک مقدار کنده
در تعداد رکورد بالا بهتره از روشی که در پست #2 گفته شد استفاده کنید که البته اون هم یک مقدار ویرایش لازم داره تا بهینه سازی بشه:
[php]
$sql = mysql_query("SELECT MAX(id) FROM table_name;");
list($count) = mysql_fetch_row($sql);
$randId = mt_rand(0, $count);
$sql = mysql("SELECT * FROM table_name WHERE id>=$randId LIMIT 1;");
[/php]
یا اینکه میشه همه کارها رو از طریق mysql و با یک کوئری انجام داد:
البته من هیچ کدوم از این روش ها رو روی جدولی با تعداد رکورد خیلی زیاد تست نکردم و فقط تئوری میگم. فرض هم بر این هست که فیلد id ایندکس شده هست و بنابراین شمارش کل رکوردها خودش یه دردسر جدید ایجاد نمیکنه!کد:SELECT * FROM table_name WHERE id>=RAND() * (SELECT MAX(id) FROM table_name) LIMIT 1;