2016-03-21 9 views
0

MYSQLデータベースの結果を表示するPHPクエリがあります。私はSwiper jqueryプラグインを使用して、各スライドページに9つの結果を表示します(スライドは3つあります)次に誰かが次のページに行くと、次のページが表示されます。これを達成するために使用するPHPのクエリです。複数のスライドのORDER BY

$query_page_1 = mysqli_query($connection, "SELECT * FROM tblclients WHERE tblclients.package = 'standard' ORDER BY RAND() LIMIT 0, 9"); 
$query_page_2 = mysqli_query($connection, "SELECT * FROM tblclients WHERE tblclients.package = 'standard' ORDER BY RAND() LIMIT 9, 9"); 
$query_page_3 = mysqli_query($connection, "SELECT * FROM tblclients WHERE tblclients.package = 'standard' ORDER BY RAND() LIMIT 18, 9"); 

私の問題は、私はRAND()BY ORDERと各ページの結果をランダム化すると、それがページへのページ1から同じ結果の一部を繰り返すことになります、である2

+0

これは 'Rand()'の役割です。 – 1000111

+0

ページワイズのランダム化が必要な場合は、「some field」で別の固定順序を設定する必要があります。 – 1000111

+0

すべてのページロードでランダムな結果が必要な場合は、RAND()を使用してすべての結果を取得する必要があり、ページネーションはjQueryで使用する必要があります。またはページネーションが必要なだけでRAND()を削除すると、重複したレコードが取得されませんでした。 –

答えて

0
  • の場合順序が1つしかなく、ORDER BY RAND()の場合は、 は表のデータ・セット全体で行をランダム化します。
  • そのため、異なるページに同じ行が表示されることがあります。
  • これを避けるために、ページワイズのランダム化が必要です。
  • を使うと、結果セットが いくつかのフィールド は、一般的な順序(静的秩序の種類や固定 発注)を保証します(そのテーブルの主キーによってより良い順)に基づいて注文している必要があり、これを達成するために。
  • この結果をRand()で整理し、これらの結果をランダム化します。

問合せは、下記のようなものがあります

$query_page_1 = mysqli_query($connection, "SELECT * FROM (SELECT * FROM tblclients ORDER BY tbclients.Primary_Key LIMIT 0, 9) t ORDER BY RAND()"); 
$query_page_2 = mysqli_query($connection, "SELECT * FROM (SELECT * FROM tblclients ORDER BY tbclients.Primary_Key LIMIT 9, 9) t ORDER BY RAND()"); 
$query_page_3 = mysqli_query($connection, "SELECT * FROM (SELECT * FROM tblclients ORDER BY tbclients.Primary_Key LIMIT 18, 9) t ORDER BY RAND()"); 

注:お使いの場合には

SELECT 
* 
FROM 
(  
    SELECT 
    * 
    FROM tblclients 
    WHERE tblclients.package = 'standard' 
    ORDER BY tblclients.Primary_Key 
    LIMIT 0, 9 
) AS t 
ORDER BY RAND() 

SQL FIDDLE DEMO

あなたはを交換する必要がありますはPrimary keyです。

他の2つのクエリについても同じことが言えます。

0

これを解決するには、ページ全体に共通のシードを提供する必要があります。例えば:が共通のランダムシードである

$query_page_1 = mysqli_query($connection, "SELECT * FROM tblclients WHERE tblclients.package = 'standard' ORDER BY RAND(42) LIMIT 0, 9"); 
$query_page_2 = mysqli_query($connection, "SELECT * FROM tblclients WHERE tblclients.package = 'standard' ORDER BY RAND(42) LIMIT 9, 9"); 
$query_page_3 = mysqli_query($connection, "SELECT * FROM tblclients WHERE tblclients.package = 'standard' ORDER BY RAND(42) LIMIT 18, 9"); 

関連する問題