勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

MySQLでランダムにデータを取得しつつページング機能も実装する方法

   2024/04/18  PHP MySQL / MariaDB

MySQLからデータを持ってくる際にランダムな表示を行ってほしいと言われた。ただ、1ページあたり20件表示で、検索結果件数がそれ以上ならページをつけてほしいとのこと。調べたところMySQLのRAND()関数で解決した。以下に対応方法をメモ。

 

ソースコード

<?php
$rand = ( isset($_GET['rand']) && is_numeric($_GET['rand']) ) ? $_GET['rand'] : rand(1,100); //クエリが設定されればそれを引き回す。無ければ1-100の間でランダムな数値を設定する
$sql = '
    SELECT SQL_CALC_FOUND_ROWS *
    FROM testtable AS
    ORDER BY RAND(' . $rand . ')
    LIMIT ' . $offset . ',' . $limit
;

ページングの際に$randをクエリにつけてあげると上手いこといった。

 

参考サイト

http://satussy.blogspot.jp/2011/04/mysql.html?m=1

 - PHP MySQL / MariaDB

  関連記事

MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法
MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法

MySQLにdate型のカラムに誕生年月日が格納されており、そこから干支(十二支 ...

MySQLで歯抜けになっているint型の数値を取得する
MySQLで歯抜けになっているint型の数値を取得する

MySQLで歯抜けになっているシーケンス番号を 取得したいケースがあった。 ■ソ ...

MySQLでホスト指定しても正常に接続できない場合
MySQLでホスト指定しても正常に接続できない場合

MySQL自体は動いており、ユーザーも登録されているのに、ホスト名を指定しても正 ...

WordPressサイトのロードアベレージが高い際の対応方法
WordPressサイトのロードアベレージが高い際の対応方法

あるWordPressサイトのロードアベレージが先月ぐらいまでは通常0.5前後で ...

InnoDBのオートインクリメントで抜け番が発生する原因について
InnoDBのオートインクリメントで抜け番が発生する原因について

MySQLのInnoDBでIDというカラムにオートインクリメント設定していたが、 ...