sql >> データベース >  >> RDS >> Mysql

SQLクエリの実行ごとにランダムな一意のレコードを選択する方法

    シードパラメータをRAND()に渡すことができるため 関数を使用すると、最初のページの前にシードを生成することで、ランダムな結果を「ページ分割」できます。

    サンプルコード:最初のページの場合(言語によって異なります):

    int seed = Math.abs(new Random().nextInt());
    

    SQLクエリ:

    SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200;
    

    シードをどこかに保存します(Webベースのアプリケーションの場合は、urlパラメーターまたはセッションを使用できます)。次のページの場合:

    SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200 * {pageNumber}, 200;
    

    注:RAND()による並べ替え は重い操作であるため、URLのハッシュコードを使用してインデックス付きの列を保存してから、モジュールベースまたはその他のランダム関数を使用する方がよい場合があります。



    1. 月と年のみに基づいてmySQLを選択します

    2. MySQLInnodbクラッシュ

    3. 各グループの上位1行を取得

    4. PDOは、(特定のテーブル内の)データの行の削除を拒否します