プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
MySQL、データをランダムに抽出、かつ、取得する内容は固定にする
結論から書くと、select文のorder by句を

ORDER BY
    rand(【数字】)

とすればOKです。
データ自体はランダムに抽出されますが
【数字】が同じであれば、同じデータが取得されます。

それでは詳細を書いていきます。

とあるサイトで「その他の記事」みたいな形で
記事のタイトルをランダムに表示したくてですね。

SELECT
    t.title
    ,t.url
FROM
    tbl1 t
ORDER BY
    rand()

;

のようなSQL文を発行していたのです。

ところがどっこい、これだとちょっと問題がありました。
その問題とは

ページを更新すると、表示内容が変わる

です。
ページの更新ボタンを押したり、次のページに移動して戻ってくると
表示内容が変わってしまうのです。
仕方ないこととはいえ、これはちょっと不便だなぁ(-公-;

というわけで、これを回避するために

1.取得する内容自体はランダム
2.何回取得しても同じ結果を取得

ができないかな?と思い、調べたのが今回のきっかけです。
「1.」は既にできているので「2.」ができないかどうかを調べてみました。

Google先生、何とかならんの(--?

ふむふむ(--)

rand()のカッコの中に数字を入れて、例えば

SELECT
    t.title
    ,t.url
FROM
    tbl1 t
ORDER BY
    rand(1)
;

のようにすればOKでした。
rand()のカッコ内に数字を入れれば、その数字に対応する結果が取得されます。
数字が同じであれば、取得結果は同じになります。

これだ!( ̄∀ ̄)

早速、rand()の中にページ番号を入れることにしました。
結果、取得内容をランダムで固定化することができました。
もちろん、ページが変わればページ番号も変わるので、取得内容も変わります。
同じページであれば、ページ番号が同じなので、取得結果は同じです。
ページを再表示しても、移動して戻ってきても同じ結果が取得されます。

やったねっ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● MySQL 

  関連記事