0

对不起,标题很难用词。

使用 PDO,我有一个包含 100 条记录的数据库。一次选择随机数量的记录,并保存最后使用的 ID。每次它抓取随机数量的记录时,它都会从上次停止的地方开始,从保存的 ID 开始。到目前为止很容易。

我的问题是,如果最后一次使用的 ID 是 94(共 100 个)并且记录数是 10。我得到下一个 6 OK。但随后需要在 ID 1 处重新启动并继续循环。

我可以在循环结束时确定我是最后一个记录 ID 并从 ID 1 开始执行新查询。但这似乎有点笨拙,对更好的方法有什么想法吗?

为了避免重复发布关闭,如何从数据库中随机获取 10 条记录而不重叠结束边界?是关于获得一个恰好在接近尾声的地方开始的随机子集。

4

1 回答 1

2

假设$lastID是最后使用的 id,$myLimit是您想要获取的记录数。

$qry = "SELECT id, field_01, field_02
    FROM (
        SELECT id, field_01, field_02
        FROM my_table
        WHERE id >= {$lastID}
        LIMIT {$myLimit}
        UNION 
        SELECT id, field_01, field_02
        FROM my_table
        WHERE id < {$lastID}
        LIMIT {$myLimit}
    ) tab
    LIMIT {$myLimit}";

此查询的想法是执行以下操作:

  1. 获取 id 大于或等于 $lastID 的数据,限制为 $myLimit 行。
  2. 获取 id 小于 $lastID 的数据,限制为 $myLimit 行。
  3. 联合上面的两个查询。
  4. 获取前 $myLimit 行。

希望这会有所帮助。

于 2013-07-23T06:09:50.710 回答