PDA

View Full Version : سوال: انتخاب چند رکورد از جدول به صورت تصادفی



iradata
شنبه 23 بهمن 1389, 13:53 عصر
با سلام من می خوام که از جدول چند رکورد روو به صورت تصادفی و غیر تکراری دریافت کنم من از این کد استفاده کردم ولی جواب نداد


$query = " SELECT num FROM draw ORDER BY RAND() LIMIT 5";

کسی می دونه که مشکلش چی هست ؟

ghasemweb
شنبه 23 بهمن 1389, 14:55 عصر
با سلام من می خوام که از جدول چند رکورد روو به صورت تصادفی و غیر تکراری دریافت کنم من از این کد استفاده کردم ولی جواب نداد


$query = " SELECT num FROM draw ORDER BY RAND() LIMIT 5";

کسی می دونه که مشکلش چی هست ؟

من تست کردم جواب میده مشکلی نداره اگه تکه کد مربوط به این کار رو قرار بدی شاید مشکلت رو راحت بفهمیم.

mohsen6500
شنبه 23 بهمن 1389, 15:55 عصر
سلام اینم یه نمونه که من توی وب سایتم به کار بردم و کار میکنه
اگه اون جواب نمیده اینو یه تست بکن

$query = mysql_query("SELECT * FROM table ORDER BY rand() desc limit 0,10") ;

iradata
شنبه 23 بهمن 1389, 16:57 عصر
چرا کار می کنه ولی به اوون تعداد که نوشتم رکورد بر نمیگردونه مثلا من اینجا 5 روو وارد کردم یعنی 5 تا رکورد باید بر گردونه ولی 2 تا رکورد بر میگردونه

اینم کد کامل :


<?php


echo '<form id="form1" name="form1" method="post" action=""> <input type = "submit" name = "Change" value = "submit"/> <input type="text" name="count" /> <div class="table" dir="rtl">
<table>
<thead>
<tr>
<th class="left">شماره</th>
<th>نام</th>
<th>فامیلی</th>
<th>تلفن</th>
<th>آدرس</th>

</tr>
</thead>
<tbody>';


$count = $_POST['count'];
echo $count;
//Connect To DataBase
$db =mysql_connect("localhost","root","");
mysql_select_db('test');
// for($i=1;$i<=$count;$i++){
$query = " SELECT num FROM test ORDER BY RAND() LIMIT $count";
$result = mysql_query($query);
$num=mysql_num_rows($result);
echo $query;
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {


$row= mysql_fetch_assoc($result);
$name= stripslashes($row['name']);
$family= stripslashes($row['family']);
$tel= stripslashes($row['tel']);
$address= stripslashes($row['address']);
$num= stripslashes($row['num']);
echo '<tr>
<td class="date">'.$num.'</td>
<td class="price">'.$name.'</td>
<td class="price">'.$family.'</td>
<td class="price">'.$tel.'</td>
<td class="title">'.$address.'</td>

</tr>';
}
mysql_close($db);

echo' </tbody>
</table></form>';
?>

tem988
شنبه 23 بهمن 1389, 18:36 عصر
سلام
ببین تو میخوای همه رو فراخوانی کنید و نمایش بدی چرا زدی select num اینجا فقط num انتخاب میشه

Select * بزنی درست میشه




$query = " SELECT * FROM test ORDER BY RAND() LIMIT $count";

iradata
یک شنبه 24 بهمن 1389, 10:45 صبح
سلام
ببین تو میخوای همه رو فراخوانی کنید و نمایش بدی چرا زدی select num اینجا فقط num انتخاب میشه

Select * بزنی درست میشه




$query = " SELECT * FROM test ORDER BY RAND() LIMIT $count";



این کاروو هم انجام دادم ولی هنوز همون مشکل وجود داره !!!!!

mtchabok
یک شنبه 24 بهمن 1389, 10:54 صبح
این کوئری رو از طریق برنامه های دیگه به پایگاه داده ات بفرست و نتیجه رو ببین اگه همین جواب فعلیت رو میده پس مطمئن باش که مشکل از اطلاعات موجود در جدولت هس ولی اگه جواب درست داد مطمئن باش که اشکال از اسکریپتی هس که با php نوشتی . و به غیر از این دو تا حالت چیز دیگه ای وجود نداره چونکه کوئری درسته .

iradata
یک شنبه 24 بهمن 1389, 10:58 صبح
این کوئری رو از طریق برنامه های دیگه به پایگاه داده ات بفرست و نتیجه رو ببین اگه همین جواب فعلیت رو میده پس مطمئن باش که مشکل از اطلاعات موجود در جدولت هس ولی اگه جواب درست داد مطمئن باش که اشکال از اسکریپتی هس که با php نوشتی . و به غیر از این دو تا حالت چیز دیگه ای وجود نداره چونکه کوئری درسته .

راه دیگه ای به جز این روش برای انتخاب تصادفی فیلد از جدول وجود داره ؟؟؟؟؟

mtchabok
یک شنبه 24 بهمن 1389, 11:07 صبح
میتونی از طریق php رندوم بگیری ولی اینکار خیلی پر هزینه هس و منابع سیستمی زیادی رو مبره .
به این صورت که یه فیلد منحصر به فرد رو از جدولت برای همه رکوردها رو بگیری و توسط php رندومش رو در بیاری و در انتها از جدولت فقط تعداد گرفته شده از رندوم رو select کنی .
این روش همونطوریکه گفتم خیلی از منابع سیستم رو مصرف میکنه و راه حل خوبی نیس . ولی اگه واقعا از طریق کوئری نمیشه کاری کرد این روش هم بد نیس .

tem988
یک شنبه 24 بهمن 1389, 11:14 صبح
سلام قبل اسم جدولت اسم دیتابیس رو هم بزار مثل همین مثالی که پایین زدم شاید هم مشکل از این باشه
اگر مشکلت باز هم حل نشد کدهاتو که فرستادی یک زحمت بکش ی بک آپ از دیتابیس بگیر بزار اینجا تا برات اوکی کنم



$query = " SELECT * FROM Database_name.test ORDER BY RAND() LIMIT $count";

iradata
یک شنبه 24 بهمن 1389, 11:20 صبح
این کوئری رو از طریق برنامه های دیگه به پایگاه داده ات بفرست و نتیجه رو ببین اگه همین جواب فعلیت رو میده پس مطمئن باش که مشکل از اطلاعات موجود در جدولت هس ولی اگه جواب درست داد مطمئن باش که اشکال از اسکریپتی هس که با php نوشتی . و به غیر از این دو تا حالت چیز دیگه ای وجود نداره چونکه کوئری درسته .

این کد روو داخل قالب دیگه ای گذاشتم اونجا کار کرد ولی نمیدونم که چرا داخل این قالبم کار نمی کنه !!!! :افسرده:

amir001
دوشنبه 25 بهمن 1389, 13:47 عصر
راه ساده تر هم هست.

محدوده رندوم انتخاب کن.

من خودم از این روش استفاده یکنم.


$Start = rand(0,MAX-VAL); // MAX-VAL == Max record in DB
$query = "SELECT * FROM `table` LIMIT ".$Start." , 5";اگر اون روش جواب نویده این را تست کن.
جای MAX-VAL هم حد اکثر تعداد رکوردهات را بذار.

-------------------------------------------------------------------------------
البته این که 5 رکورد را از یک جای تصادفی انتخاب میکنه. شروع تصادفی هست اما 5 رکورد خروجی پشت سر هم هستند.

mtchabok
دوشنبه 25 بهمن 1389, 21:17 عصر
این کد روو داخل قالب دیگه ای گذاشتم اونجا کار کرد ولی نمیدونم که چرا داخل این قالبم کار نمی کنه !!!! :افسرده:
عزیزم
بهتره که کدهای قالبت رو برامون بزاری ببینیم که چرا این اتفاق می افته ... اگه هم نمی تونی بزاری مجددا کدهات رو بررسی کن ببین کجای کدت مشکل داره که به اینصورت جواب میده ...