PHP隨機抓取5筆資料庫資料

大家好!
我最近需要製作類似隨機挑選同類商品的推薦功能。
目前已有辦法從資料庫中隨機抓取一筆資料,但不會抓取更多筆的資料。
希望有人可以指教,先謝謝!
標籤:

評論

  • 你說的應該是mysql資料庫隨機抓N筆資料吧? 其實你到google搜尋這些關鍵字可以找到很多

    參考:
    https://fecbob.pixnet.net/blog/post/43572199-[mysql]-隨機挑選n條資料
  • ---與其直接給答案,不如教你如何找解法,以後就會越來越能自己解決問題---

    碰到問題時,你先整理清楚要做的功能、卡在哪,比如:

    ---需求---
    PHP隨機抓取5筆資料庫資料 => 這其實是用PHP去抓MySQL或MSSQL資料庫,然後隨機N筆

    ---如何解---
    1. 首先你可以用關鍵字問Google,這個方法是最容易嘗試的,如:
    mysql 隨機抓取

    就會找到一些你想要的文章、程式碼片段,如果沒有完全命中,你就再換幾個關鍵字搜尋看看

    2. 還是找不到解法怎辦? 一樣用Goolge搜尋,只是這次你要聚焦在英文版的技術討論,因此你的關鍵字就要換成:
    mysql rand get

    英文版的討論文章不用看懂他們的句子說什麼,我們工程師要找的解法是什麼? 程式語法嘛!所以你重點放在他們寫的SQL語法跟PHP語法,從裡面找自己要的東西

    實在不知道他們前後文在說什麼,那你還有一招,用Google翻譯丟進去看吧,至少50%翻出來的東西能看懂

    3. 把網路上文章有參考價值的程式拿來實作在自己電腦上,大部分問題都能解決,因為你遇到的問題有90%以上,別人早就遇到過了,所以參考別人的解法是最快的方法


    ※以上這些做法,如果你逐步去探索、理解問題,相信卡住的時間會越來越短,一旦你解掉問題也會有成就感,我也是這樣一步一步熟練的,加油

    共勉之!
  • billy98542 你好:

    謝謝你的幫助及提點。
    你提供的方式我已經試過,自己也已有先在網上搜尋並嘗試過各位專家的做法,但是不知道為什麼就是沒有辦法成功。
    也有想過或許是列出資料的方式有錯誤,但列出方式和另一個頁面是一樣的而那個頁面可以成功列出一筆以上的資料(但那個頁面列的不是隨機資料,而是逐筆列出資料)。
    列出資料的方式是使用for迴圈,讓他可以逐筆列出下一筆資料。

    實在沒辦法了才上論壇問的...。
    希望有好心人可以指點一下可能的問題點...。

    謝謝
  • edited 七月 24
    To meils0256:

    你先試第1條路,直接抓資料庫取隨機資料,這是正解:

    1. 我剛剛用MySQL,使用以下例子是可以達到隨機3筆資料抓取的,你先用MySQL的資料庫軟體測測看 (如:phpMyAdmin, MySQL Workbench...等)

    軟體網站:
    https://www.mysql.com/products/workbench/

    這個SQL語法確認可隨機抓3筆,把以下的[LIMIT 3]換成其他數字N,就是隨機取N筆:
    SELECT *
    FROM category
    ORDER BY RAND( )
    LIMIT 3
    

    抓出來的資料,再從PHP用for迴圈跑,就能達成你要的需求了,每次讀取該頁面都隨機抓3筆資料

    2. 老實說,你的需求用MySQL隨機抓資料就是最佳解,你先試試看資料庫這條路,如果不行,還有第二條路,但是我覺得是多此一舉額外加重主機Loading:

    你先抓資料庫的前100筆資料,用for迴圈跑的時候,利用PHP內建的rand()函數可以隨機取幾筆資料,再把結果印出,只是這種方式沒有MySQL來的快速、直覺
    <?php
    $data_get = array();
    for ($SQL_data as $k=>$v){
        $rand_key = rand(0,99); # 因為取前100筆資料,所以隨機取Key值
        if (count($data_get) < 5 && count($data_get[$rand_key]) == 0) $data_get[$rand_key] = $v; # 看你要抓幾筆隨機資料,這邊設定抓5筆
    }
    
    var_dump($data_get); # 抓取結果
    ?>
    


  • edited 七月 24
    如果要說可能的問題點,你可能要重新檢查PHP連線MySQL這段的語法是不是有錯誤

    建議有兩個方向來排除問題:

    1. SQL語法是否正確-使用MySQL軟體直接執行語法看看是否為隨機資料(這部分我已確定SQL語法沒問題,但你可以再檢查一次)

    2. PHP抓MySQL資料庫的結果是否正確-請把抓取結果印出來看看,抓不對那就寫一個簡單點的基本PHP抓資料庫語法,再把SQL隨機抓取語法代進去測
    <?php
        $dbhost = 'hostname 或 網址';
        $dbuser = '帳號';
        $dbpass = '密碼';
        $dbname = '資料庫名稱';
        $conn = mysql_connect($dbhost, $dbuser, $dbpass) ;//連接資料庫
        mysql_query("SET NAMES 'utf8'");//設定語系
        mysql_select_db($dbname);
        $sql = "
    		SELECT *
    		FROM category
    		ORDER BY RAND( )
    		LIMIT 3
        ";// 隨機查詢
        $result = mysql_query($sql) ;
        while($row = mysql_fetch_array($result)){//印出資料
            echo $row['查詢的欄位1']." ";
            echo $row['查詢的欄位2']."<br>";
        }
    ?>
    
Sign In or Register to comment.