خواندن رکوردهای تصادفی از دیتابیس

babak869

Member
سلام
فر ضکنیم توی دیتابیس 10 رکورد داریم
میخوام هر سری به تعداد 5 رکورد و بصورت تصادفی بخونم
مثلا یه بار رکوردهای 3و5و1و8و7 یه بار 9و4و3و7و8و1و و .....
اگه دوستان راهنمایی کنند ممنون میشم
موفق باشید
 

alireza82

Well-Known Member
سلام
PHP:
shuffle();
این تابع به صورت تصادفی یه ارایه رو سورت میکنه! میتونید یه بار ارایه مربوط به اطلاعات بازکشی شده از دیتابیس رو بهش بدید بعد
هر چندتاش رو میخواید نمایش بدید.
البته ممکنه تابع مشابه ای هم تو خود mysql موجود باشه که برای فهمیدنش میتونید به http://www.mysql.com سر بزنید.
موفق باشید
 

jhoseini

Member
سلام
PHP:
shuffle();
این تابع به صورت تصادفی یه ارایه رو سورت میکنه! میتونید یه بار ارایه مربوط به اطلاعات بازکشی شده از دیتابیس رو بهش بدید بعد
هر چندتاش رو میخواید نمایش بدید.
البته ممکنه تابع مشابه ای هم تو خود mysql موجود باشه که برای فهمیدنش میتونید به http://www.mysql.com سر بزنید.
موفق باشید

عجب بابا، این php تمومی نداره،:)
این shuffle رو تا حالا ندیده بودم

علیرضا جان، تابعی سراغ نداری که آرایه از رکورد ها رو بر حسب یکی از فیلد های رکورد sort کنه؟
164.gif
مثلا:
PHP:
$myArr[0]['name'] = "ali";
$myArr[0]['tel'] = "2323";
$myArr[1]['name'] = "mamali";
$myArr[1]['tel'] = "2321";
یه تابع مثل:
PHP:
SortByField($myArr, "tel")
که خروجی بر حسب tel سورت شده باشه
ها؟ نمیشه؟ کسی نمیدونه؟
297.gif
 
آخرین ویرایش:

babak869

Member
نمونه:
کد:
SELECT * FROM `table_name` WHERE 1 ORDER BY rand() LIMIT 5

علیرضا جون از جوابت ممنونم و از بقیه دوستان هم سپاسگزاری میکنم .
فقط یه سوال!!
توی دستور بالا بعداز کلمه WHERE نوشتی 1 . آیا اون معنی خاصی داره یا بجای پارامتر خاصی نوشتیش؟

ممنونم
 

alireza82

Well-Known Member
سلام
خواهش بابک جان! قابلی نداشت!
والا جلال جابهترین چیزی که در این مورد برات \یدا کردم با استفاده از asort(); هست! که همونطور که میدونی این تابع برای مرتب سازی ارایه ها با حفظ تناظر بین اندیسها و مقادیر هست.
تو منوال php برای مرتب سازی ارایه های چند بعدی با استفاده از یکی از خونه ها پیشنهادی که ارایه شده این هست:
PHP:
If you need to sort a multi-demension array, for example, an array such as

$TeamInfo[$TeamID]["WinRecord"]
$TeamInfo[$TeamID]["LossRecord"]
$TeamInfo[$TeamID]["TieRecord"]
$TeamInfo[$TeamID]["GoalDiff"]
$TeamInfo[$TeamID]["TeamPoints"]

and you have say, 100 teams here, and want to sort by "TeamPoints":

first, create your multi-dimensional array. Now, create another, single dimension array populated with the scores from the first array, and with indexes of corresponding team_id... ie
$foo[25] = 14
$foo[47] = 42
or whatever.
Now, asort or arsort the second array.
Since the array is now sorted by score or wins/losses or whatever you put in it, the indices are all hoopajooped.
If you just walk through the array, grabbing the index of each entry, (look at the asort example. that for loop does just that) then the index you get will point right back to one of the values of the multi-dimensional array.
Not sure if that's clear, but mail me if it isn't...
-mo
و یه راه دیگه هم این هست:
PHP:
Here's my fixed up msort array. What it does is goes through a multidimensional array, and sorts it by the desired key (defaulting to 'id').

So, for example, if you have an array like:

array[0]['value'] = "statement 2"
array[0]['id'] = "2"
array[1]['value'] = "statement 3"
array[1]['id'] = "3"
array[2]['value'] = "statement 1"
array[2]['id'] = "1"

it would rearrange and return the array to be like:

array[0]['value'] = "statement 1"
array[0]['id'] = "1"
array[1]['value'] = "statement 2"
array[1]['id'] = "2"
array[2]['value'] = "statement 3"
array[2]['id'] = "3"

The 'id' index can start at any point, and any array item missing the id index will be added to the end.

<?php
function msort($array, $id="id") {
        $temp_array = array();
        while(count($array)>0) {
            $lowest_id = 0;
            $index=0;
            foreach ($array as $item) {
                if (isset($item[$id]) && $array[$lowest_id][$id]) {
                    if ($item[$id]<$array[$lowest_id][$id]) {
                        $lowest_id = $index;
                    }
                }
                $index++;
            }
            $temp_array[] = $array[$lowest_id];
            $array = array_merge(array_slice($array, 0,$lowest_id), array_slice($array, $lowest_id+1));
        }
        return $temp_array;
    }
?>

Ex:

<?php

//oh no, this is not in the ordered by id!!
$data[] = array("item"=>"item 4");
$data[] = array("item"=>"item 1", "id"=>1);
$data[] = array("item"=>"item 3", "id"=>3);
$data[] = array("item"=>"item 2", "id"=>2);

var_dump(  msort($data)  ); //just msort it!

/* outputs

array
  0 =>
    array
      'item' => 'item 1' (length=6)
      'id' => 1
  1 =>
    array
      'item' => 'item 2' (length=6)
      'id' => 2
  2 =>
    array
      'item' => 'item 3' (length=6)
      'id' => 3
  3 =>
    array
      'item' => 'item 4' (length=6)

*/

?>
این مطالب برگرفته از صفحه:
http://ir2.php.net/manual/en/function.sort.php هست که اونجا رو یه نگاه بندازید بد نیست.
موفق باشید.
 

msnasiri

Member
علیرضا جون از جوابت ممنونم و از بقیه دوستان هم سپاسگزاری میکنم .
فقط یه سوال!!
توی دستور بالا بعداز کلمه WHERE نوشتی 1 . آیا اون معنی خاصی داره یا بجای پارامتر خاصی نوشتیش؟

ممنونم

where یعنی وقتی که شرط روبروش درست باشه داده ها رو برگردون
و 1 هم که به معنای درست هست پس where 1 یعنی تمام داده ها رو برگردون ---> ننوشتن هیچ اشکالی نداره

و داخل چندتا پست بالاتر دیدم limit 1 این داخل Sql Server معنی داره که باید به شکل Limit count باشه ولی داخل mysql باید به شکل limit start,count باشه یعنی بگیم limit 0,1 که یعنی فقط اولین رکورد رو برگردون
 

jhoseini

Member
سلام
خواهش بابک جان! قابلی نداشت!
والا جلال جابهترین چیزی که در این مورد برات \یدا کردم با استفاده از asort(); هست! که همونطور که میدونی این تابع برای مرتب سازی ارایه ها با حفظ تناظر بین اندیسها و مقادیر هست.
تو منوال php برای مرتب سازی ارایه های چند بعدی با استفاده از یکی از خونه ها پیشنهادی که ارایه شده این هست:

یعنی واقعاً php تابع (دست نویس نه!) درست درمونی برای این کار نداره؟
sigh.gif

مثل اونی که گفتم:
PHP:
SortByField($myArr, "tel")
?!
 

alireza82

Well-Known Member
والا نه!! یه جورایی میاد یه ارایه یه بعدی درست و اون رو سورت و با استفاده از اون همه رو سورت میکنه!!!
شاید بشه الگوریتم های مناسب تری براش طراحی کرد که باید روش فکر شه!! البته منم همین شیوه فقط در حال حاضر به نظرم میرسه!!!
ولی باسد روش فکر کرد!!! شاید یه روش بهتر به پیدا شه که حتما میشه!! به قول این برنامه نویس های خفن همیشه راه n ام ای هم هست.
 

tabib_m

Member
یعنی واقعاً php تابع (دست نویس نه!) درست درمونی برای این کار نداره؟
:)
چه انتظاری از php داری؟
این چیزی که شما میخوای خیلی خاصه
من میتونم هزار تا کار دیگه بگم، که از لحاظ مطرح بودن، در حد همین کاری که شما میخوای انجام بدی باشه. خوب طبیعتا برای اون هزار تا کار php نمیات تابع بسازه.
مخصوصا در مورد آرایه های تو در تو، که هزاااار جور میتونن چیده شده باشن.
طبیعتا من از php انتظار ندارم که یه تابع داشته باشه که با صدا کردن اون تابع یک CMS ساخته بشه :)
البته اغراق می کنم، ولی میخوام قضیه برات ملموس بشه :)
 

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

بالا