0

データベーステーブルから結果を返すWebサイトのページにページ付けを実装しようとしています。

現在、すべての行をランダムな順序で返します。ただし、データベースが大きくなるにつれて、これらの結果をすべて1ページに表示するのではなく、ページ分割したいと思います。ただし、たとえば20レコードを表示するためだけに、すべての結果を返したくはありません。ページによっては、データベースから関連する20レコードだけを取得したいと思います。

私はこのチュートリアルに従っています:チュートリアル

ただし、ホスティングでSQL SERVER 2008が使用されているため、この句でクエリを使用することはできませんOFFSET(2012年に導入されたと思います)。

この質問の答えに従ってみましたが、結果をランダムな順序で表示したいORDER BYので、派生テーブルでは実行できません...そのため、アイデアに少しこだわっています。

何か助けはありますか?ありがとう!

これは私が現在持っているものです:

    SELECT Title, Filename, PhotoURL, Orientation, FolderName, SetURL, RowNum
      FROM (
            SELECT  p.Title, p.Filename, p.URL AS PhotoURL, p.Orientation, s.FolderName, s.URL AS SetURL, ROW_NUMBER() OVER (ORDER BY p.PhotoID) AS RowNum
          FROM  Photos p
                LEFT OUTER JOIN SetPhotos sp
                    ON sp.PhotoID = p.PhotoID
                LEFT OUTER JOIN [Sets] s
                    ON s.SetID = sp.SetID
         WHERE  p.Hide = 0
      ORDER BY  NEWID()
        ) AS PaginatedPhotos
 WHERE  PaginatedPhotos.RowNum BETWEEN 0 AND 10
4

2 に答える 2

2
  1. テーブルに整数列'order'を追加します
  2. すべての行のこの列を一意の乱数で埋めるコードを記述します
  3. このコードを時々実行して、行をシャッフルします
  4. 'order'でソートしながら、通常どおりページネーションを行います

ページ付けをしている人の途中で行をシャッフルすると、同じ行が異なるページに表示される可能性があることに注意してください。

于 2012-10-25T19:18:42.767 に答える
1

を選択するだけTOP(pagesize)です。順序はランダムであるため、page=2 を要求しても、ページ 1 を表示した元の結果のページ 2 にはなりません。つまり、順序がランダムで毎回変わる場合、ページ 1 は要求されたページに対して常に正しいです。

于 2012-10-25T18:52:56.503 に答える