نمايش چند مقدار از ديتابيس به صورت تصادفي

mosi20

Active Member
سلام
توی دیتابیسم یه سری متن دارم
حالا میخوام هر بارکه یه صفحم لود میشه 3 تا از اين متن ها را به صورت تصادفي نمايش بده.
كسي ميتونه بهم يه كد بده؟
 

I.NoBody

Active Member
رکوردهاي table ديتا بيست فيلدي دارن که شامل اعداد باشن. مثلاً يه فيلد auto increament داره؟
 

mosi20

Active Member
بله دارند اما این وسط ممکنه چند بار پیوستگی را از دست داده باشه مثلا بشه 2 و 5 و 6 و 18 و19 و20و 21
 

I.NoBody

Active Member
خوب يکي از راه هايي که به ذهن من ميرسه اينه که اول يه query از اين فيلدهاي auto increament بگيري و اونا رو fetch کني. بعد سه تا رندم بزني بين عدد 1 و بالاترين عدد (مثلاً $max=rand*1,$max_id);). حالا چک کني که آيا اين اعداد وجود دارن يا نه. البته توي يک حلقه While مي توني اين چک کردن رو همزمان با رندم زدن هات انجام بدي.
بعدش بر اساس اعدادي که به دست اومدن، query رو بگيري و به اونچيزي که ميخواي برسي.
البته مي دونم که ممکنه يه مقدار وقتگير باشه ولي در حال حاضر چيز ديگه اي به ذهنم نميرسه.
 

mosi20

Active Member
دستت درد نكنه اما اين فكر را خودم هم كرده بودم
اما ميخواستم با يك query ساده اين كار رو بكنم.
 
آخرین ویرایش:

I.NoBody

Active Member
PHP:
<?
mysql_connect("localhost",$host_user,$host_pass);
mysql_select_db($db);
$result=mysql_query("select id from `table`");
$num=mysql_num_rows($result);
$i=2;
$rand[0]=-1;
$rand[1]=-1;
while($i<5){
$rand[$i]=rand(0,($num-1));
if(($rand[$i]!=$rand[$i-1]) && ($rand[$i]!=$rand[$i-1]))
 $i++;
}
for($i=2;$i<5;$i++){
 mysql_data_seek($result,$rand[$i]);
 $row[$i]=mysql_fetch_row($result);	
}
for($i=2;$i<5;$i++){
$result2=mysql_query("select * from `table` where id='{$rand[$i]}'");
mysql_data_seek($result2,0);
$final[$i]=mysql_fetch_row($result2);
}

//Now your request fields are in $final[2] , $final[3] , $final[4] Array
?>
[PHP/]
من فرض کردم اسم تيبلت tbale و اسم فيلد Auto increament ت id هست
 

mosi20

Active Member
ممنون یه نگاهی بهش میکنم اما اگه با يك query میشد این کار رو کرد خیلی بهتر بود
 
كد RTL بود الان LTR شد (سر بسته شدن كد / جا بجا شده بود)
PHP:
<?php
mysql_connect("localhost",$host_user,$host_pass);
mysql_select_db($db);
$result=mysql_query("select id from `table`");
$num=mysql_num_rows($result);
$i=2;
$rand[0]=-1;
$rand[1]=-1;
while($i<5){
$rand[$i]=rand(0,($num-1));
if(($rand[$i]!=$rand[$i-1]) && ($rand[$i]!=$rand[$i-1]))
$i++;
}
for($i=2;$i<5;$i++){
mysql_data_seek($result,$rand[$i]);
$row[$i]=mysql_fetch_row($result); 
}
for($i=2;$i<5;$i++){
$result2=mysql_query("select * from `table` where id='{$rand[$i]}'");
mysql_data_seek($result2,0);
$final[$i]=mysql_fetch_row($result2);
}

//Now your request fields are in $final[2] , $final[3] , $final[4] Array
?>
 

I.NoBody

Active Member
خوب اگه مي خواي مي توني با يک query انجامش بدي.
فقط کافيه توي query اولت، به جاي id بنويسي *
 

mosi20

Active Member
ببین از کد شما که هیچی من سر در نیاوردم
اين ارورها را ميده
Warning: mysql_data_seek(): Offset 0 is invalid for MySQL result index 4 (or the query data is unbuffered) in c:\program files\easyphp1-7\www\q.php on line 20

Warning: mysql_data_seek(): Offset 0 is invalid for MySQL result index 5 (or the query data is unbuffered) in c:\program files\easyphp1-7\www\q.php on line 20

Warning: mysql_data_seek(): Offset 0 is invalid for MySQL result index 6 (or the query data is unbuffered) in c:\program files\easyphp1-7\www\q.php on line 20

تازه اول راندمت هم از 0 شروع ميشه
 
آخرین ویرایش:

mosi20

Active Member
دارک من
من هیچی از این مقاله نفهمیدم فقط شما اگه میتونید بهم کمک کنید که عددهایی که تولید میشه را چک کنم تکراری نباشه .
 
جالبه ها

خيلي جالبه اين فروم با اينهمه آدم كه مي گن برنامه نويس هستن استفاده از يك query ساده تو mysql رو نمی دونن تو خود query استفاده از rand() باعث مرتب سازي تصادفی می شه ... مثل:
PHP:
$randomresults = mysql_query("select * from yourtablenamehere ORDER BY RAND() LIMIT 0, 10");
اون limit هم 10 تا مقدار رو نشون میده.. سخت بود؟ :neutral:
 

Dark Man

Member
فرشید جان ، اینجا فرومه ، کسی با کسی دعوا نداره ، هر کسی هم که مکشلی داشته باشه ، مطرح میکنه تا جوابشو بگیره ، نه اینکه یکی که راه حل مشکل رو میدونه ، بیاد بکوبه تو سر طرف !

محسن جان ، این query بالا رو نگاه کن ، احتمالا مشکلت رفع میشه ...
 

I.NoBody

Active Member
<?php
mysql_connect("localhost",$host_user,$host_pass);
mysql_select_db($db);
$result=mysql_query("select id from `table`");
$num=mysql_num_rows($result);
$i=2;
$rand[0]=-1;
$rand[1]=-1;
while($i<5){
$rand[$i]=rand(0,($num-1));
if(($rand[$i]!=$rand[$i-1]) && ($rand[$i]!=$rand[$i-1]))
$i++;
}
for($i=2;$i<5;$i++){
mysql_data_seek($result,$rand[$i]);
$row[$i]=mysql_fetch_row($result);
}
for($i=2;$i<5;$i++){
$result2=mysql_query("select * from `table` where id='{$row[$i][0]}'");
mysql_data_seek($result2,0);
$final[$i]=mysql_fetch_row($result2);
}

//Now your request fields are in $final[2] , $final[3] , $final[4] Array
?>
 

mosi20

Active Member
farshidmokh گفت:
خيلي جالبه اين فروم با اينهمه آدم كه مي گن برنامه نويس هستن استفاده از يك query ساده تو mysql رو نمی دونن تو خود query استفاده از rand() باعث مرتب سازي تصادفی می شه ... مثل:
PHP:
$randomresults = mysql_query("select * from yourtablenamehere ORDER BY RAND() LIMIT 0, 10");
اون limit هم 10 تا مقدار رو نشون میده.. سخت بود؟ :neutral:

عزيز اگه پاسخ سوال را خودم ميدونستم كه نميومدم اينجا اين همه وقتم را تلف كنم تا يه نفر بهم پاسخ بده.
در ضمن اينقدر مغرور نباش بالاخره من هم يه چيزايي ميدونم كه تو نميدوني
يه چيز ديگه . يه نگاه به تاپيكهاي اطراف بنداز در نصف بيشتر اونا من حضور فعال داشتم و به پاسخ دادن مشغول بودم.اما نميدونم شما كجا بودي؟
 
معذرت می خوام...که اینجو.ری صحبت می کنم ولی من تاپیک هایی که شما توش پست زدین رو دیدم... تو هیچ کدومش کمک خاصی نکردین... همین طوری پست زدین.. البته بهتون بر نخوره ها ..... ولی مجیدآنلاین اون اولاش خیلی بهتر بود... خود مجید هم بود... الان دیگه مسخره شده...
 
شرمندها................... ولی اینجا مثله اینکه داره دعوا می شه....در ضمن بلد بودن یه rand() کار زیاد سختی نیست... امیدوارم متوجه شده باشی....در ضمن .....بی خیل...
 

جدیدترین ارسال ها

بالا