2

好吧,伙计们,我有这个问题

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

到目前为止一切都很好。

我想要:当我按下下一个按钮(第 2 页或第 3 页等)以查看接下来的 12 条随机记录但不显示我在上一页中的前 12 条随机记录时!

谢谢你们!ps对不起,我的英语不好!

4

5 回答 5

1

您需要保留一个数组(例如$arrRecordIds)来跟踪之前页面上显示的所有记录的 id。

当您在第一页时:

$arrRecordIds=array(); // Empty array

当您在第二页时:

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

如果您的选择查询只是连接 -where id NOT IN ( implode(',', $arrRecordIds ) )

这里$arrNewRecordIds应该包含页面上记录的 id。

于 2012-09-20T13:00:12.830 回答
1

只需尝试在数组中检索您需要的数据,在 PHP 中使用 shuffle() 将其随机化,并使用一些 JQuery 对结果进行分页,这将是非常棒的,只需一个查询而无需刷新。;)

于 2012-09-20T12:40:55.813 回答
1

您可以跟踪以前显示的记录id并将它们放入一个数组中。

在您的查询中使用id NOT IN (array)

于 2012-09-20T12:41:03.003 回答
0

应用系统随机抽样的概念,

  • 给记录编号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 回答
0

解决方案 - 这是一种享受。

  1. 对所有必需的记录进行选择随机搜索
  2. 生成一个随机用户 ID,例如。“史密斯”.rand(1000,10000)
  3. 形成一个由所有随机键组成的字符串,直到每页所需的记录数
  4. 在上面插入包含相应页码的表/字段中。
  5. 在上面重复/循环,直到没有更多页面/记录剩余 - 使用 array_splice(str,from,to) - 然后使用 $notscreen = print_r($splice, true) 将字符串存储到表 -> randompages:

tb.rec-没有 | 用户 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

...最多整个页面数组/记录数/所有页面 - 没有数据重复 - 只有 1 列随机存储的 recs 键作为检索

  1. 使用带有 WHERE 的 user-id 和 pageno 来为该单个用户和页面提取随机密钥

  2. 将字符串转换回数组,并在 SELECT WHERE 查询中使用 implode 中的数组提取特定页面的匹配键记录

  3. re-circ [ user-id & pageno ] 在搜索/视图期间使用 $_GET/POST - 在新视图或新搜索开始时重新初始化

笔记:

- 更好地使用列表进行搜索 - 但需要更多的工作来格式化字符串 - 应该给出最初存储的随机页面结果

  • 数组匹配的问题是每页排序记录;最低的是第一 - 对于页面显示来说不是那么随机

  • 临时表不好 - 因为当脚本被扔回服务器第二次或更长时间时无法访问 - 它已被 mysql 从内存中丢失

  • php 规则 - 没有脆弱的 cookie 或 java 脚本!

大问题 - 解决了。

重新补偿从您的帖子/答案中获得的帮助。

快乐的时光!

于 2016-08-08T21:59:48.760 回答