调用数据库的子集,如何在db结束时循环记录1

时间:2013-07-23 05:53:42

标签: php mysql sql pdo

对不起,标题很难说。

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

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

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

要关闭重复的帖子,How to get a random range of 10 records from a database without overlapping the end boundary?是关于获得一个接近结尾的随机子集。

1 个答案:

答案 0 :(得分: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 rows。
  2. 获取ID小于$ lastID的数据,限制为$ myLimit rows。
  3. 联盟上面的两个查询。
  4. 获取第一个$ myLimit行。
  5. 希望这有帮助。