2

さてみんな私はこのクエリを持っています

$mysql = "select * from xxx where active = 1 order by Rand() limit $start,12";
mysql_query($mysql);

これまでのところ、すべてがうまく機能しています。

次の12個のランダムレコードを表示するために次のボタン(2ページまたは3ページなど)を押しているが、前のページにあった最初の12個のランダムレコードを表示しない場合。

皆さん、ありがとうございました!ps私の悪い英語でごめんなさい!

4

5 に答える 5

1

必要なデータを配列で取得し、PHP で shuffle() を使用してランダム化し、JQuery を使用して結果をページ付けするだけで、クエリが 1 つだけで更新が不要になります。;)

于 2012-09-20T12:40:55.813 に答える
1

以前に表示されたレコードを追跡し、idそれらを配列に入れることができます。

クエリで使用するid NOT IN (array)

于 2012-09-20T12:41:03.003 に答える
1

$arrRecordIds前のページに表示されたレコードのすべての ID を追跡するには、1 つの配列 (例: ) を保持する必要があります。

最初のページにいる場合:

$arrRecordIds=array(); // Empty array

2 ページ目にいる場合:

$arrRecordIds=array_merge($arrRecordIds, $arrNewRecordIds);array_unique( $arrRecordIds );

選択クエリが単純に連結されている場合where id NOT IN ( implode(',', $arrRecordIds ) )

ここ$arrNewRecordIdsには、ページ上のレコードの ID が含まれている必要があります。

于 2012-09-20T13:00:12.830 に答える
0

解決策 - それは御馳走になります。

  1. 必要なすべてのレコードの選択ランダム検索を実行します
  2. ランダムなユーザーIDを生成します。"スミス".rand(1000,10000)
  3. ページごとに必要な数のレコードまで、すべてのランダム キーの文字列を形成する
  4. 対応するページ番号を含むテーブル/フィールドに上に挿入します。
  5. 残りのページ/レコードがなくなるまで上記の繰り返し/ループ - array_splice(str,from,to) を使用 - 次に、テーブルへの文字列ストレージに $notscreen = print_r($splice, true) を使用 -> ランダムページ:

tb.rec-no | ユーザー ID | ページノ | 文字列 ( recs から recs/page までのキーを含む)

122 | aj7894 | p1 | [0]=>100[1]=>400[2]=>056[3]=>129

123 | aj7894 | p2 | [x]99=>[x]240=>[x]7895[x]458=>320

... ページの配列全体 / レコード数 / すべてのページまで - データの重複なし - 検索されたようにランダムに格納された recs のキーの 1 列のみ

  1. user-id と pageno を WHERE と共に使用して、その個々のユーザーとページのランダム キーを引き出します

  2. 文字列を配列に変換し、implode を使用した SELECT WHERE クエリで配列を使用して、特定のページの一致するキー レコードを引き出します。

  3. 検索/ビューの期間に $_GET/POST を使用して [ user-id & pageno ] を再循環 - 新しいビューまたは新しい検索の開始時に再初期化

ノート:

-検索にはリストを使用することをお勧めします-ただし、文字列をフォーマットするにはより多くの作業が必要です-最初に保存されたとおりのランダムなページ結果が得られるはずです

  • 配列マッチングの問題は、ページごとにレコードを注文することです。最低が最初 - ページの表示はそれほどランダムではありません

  • 一時テーブルがダメ - スクリプトが 2 回目以降サーバーにスローされたときにアクセスできないため - mysql によってメモリから失われます

  • PHP ルール - 薄っぺらな Cookie や Java スクリプトはありません。

大きな問題 - 解決済み。

あなたの投稿/回答から受け取った助けを再補償します。

幸せな日々!

于 2016-08-08T21:59:48.760 に答える
0

Systematic Random Samplingの概念を適用し、

  • レコード N に番号を付け、n を決定します (ページネーション サイズ、例: 10、20)
  • (標本サイズ) 必要とするか、k = N/n = 間隔サイズ
  • 1 から k までの整数をランダムに選択し、k 番目の単位ごとに取得します

参照: http://www.socialresearchmethods.net/kb/sampprob.php

showdata.php ファイルで次のスクリプトを使用してみてください

$per_page = 12; 
$sqlc = "show columns from coupons"; 
$rsdc = mysql_query($sqlc); 
$cols = mysql_num_rows($rsdc); 
$page = $_REQUEST['page']; 
$start = ($page-1)*12; 

$N = 1000; //Total rows in your table (query to get it dynamically)
$n = $per_page;
$k = ceil($N/$n);

$range[] = $page;

for($i=1;$i<$n;$i++) {
 $range[] = ($page+$k)*$i;
}

$sqln = "SELECT * FROM ( SELECT @rownum:= @rownum+1 AS rindex, n.* FROM xxx n, (SELECT @rownum := 0) r ) AS rows WHERE rindex IN (".implode(',',$range).")";
$rsd = mysql_query($sqln); 
于 2012-09-20T13:22:39.287 に答える