Skip to content →

order by RANDのページネーションでアイテムが重複する問題を解決

order by RANDを使うと、表示順番を変えられます。

しかし、limitをつかってページネーションを組み込む場合、毎回order by RANDされるため、表示されるアイテムが重複してしまいます。1ページ目に表示されているアイテムを考慮しておらず、毎回全データからランダムなアイテムが表示されるということです。

seedを指定すればいい

結論として、order by RAND(seed)というように、seedを指定してあげればいいです。このseedは文字列でOKです。

使えそうなアイディアとしては、セッションをつかって
$_SESSION[“rankey”] = uniqid(rand(), true);
のようにセッションがきれるまでは固有のseedをつくり、利用する方法です。

このようにすると、同じseedが使われるためページをまたいでもアイテムが重複されることがありません。

Published in WEBシステム開発