php - 在 mysql/php 中每小时批量显示 100 个海量数据

标签 php mysql time cron batch-processing

我有一个包含 600 多行的数据库,但每小时只能检索/显示 100 行。所以我用

select * from table ORDER BY id DESC LIMIT 100

检索前 100 个。如何编写一个脚本,每 1 小时批量检索 100 个数据,以便我可以在 cron 作业中使用它?

最佳答案

可能的解决方案。

  1. 添加一个字段来标记记录已显示。
ALTER TABLE tablename
ADD COLUMN shown TINYINT NULL DEFAULT NULL;

NULL 表示该记录未被选择,1 - 该记录被标记为选择,0 - 该记录已被选择。

  • 当您需要选择最多 100 条记录时
  • 2.1。标记要显示的记录

    UPDATE tablename
    SET shown = 1
    WHERE shown = 1 
       OR shown IS NULL
    ORDER BY shown = 1 DESC, id ASC
    LIMIT 100;
    
    WHERE 中的

    shown = 1 条件考虑了某些记录已被标记但由于某些错误而未被选择的事实。 shown = 1 DESC 在未标记之前重新标记此类记录。

    如果有 100 条或更少的记录未被选中,则将标记所有记录,否则仅标记 100 条 id 较低(最古老)的记录。

    2.2。选择标记的记录。

    SELECT *
    FROM tablename
    WHERE shown = 1
    ORDER BY id
    LIMIT 100;
    

    2.3。标记选定的记录。

    UPDATE tablename
    SET shown = 0
    WHERE shown = 1
    ORDER BY id
    LIMIT 100;
    

    这适用于只有一个客户选择记录的情况。

    如果许多客户端可能并行工作,并且只有一个客户端必须选择一条记录,则使用某个客户端编号(在所有客户端中唯一)来标记要选择的记录,而不是 1 .

    当然,如果只有一个客户端,并且你保证选择不会失败,你可以简单地将最后显示的ID存储在某个地方(在客户端,或者在MySQL端的某个服务表中),然后简单地选择“下一步” 100"从此存储的 ID 开始:

    SELECT *
    FROM tablename
    WHERE id > @stored_id
    ORDER BY id
    LIMIT 100;
    

    SELECT MAX(id)
    FROM tablename
    WHERE id > @stored_id
    ORDER BY id
    LIMIT 100;
    

    用于存储而不是之前的@stored_id

    关于php - 在 mysql/php 中每小时批量显示 100 个海量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59661539/

    相关文章:

    php - 如何从 PDO 故障 "Error!: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined"中获取更多信息?

    php - 根据从动态下拉框中选择的值预填充文本字段(在表单中)

    objective-c - 使用两个 NSDate 计算一个人的年龄

    mysql - #1227 - 访问被拒绝;您需要(至少其中一项)SHOW DATABASES 权限

    php - 从表中选择时间戳在 x 秒内的数据

    PHP - 将 time() 调整为可被 5 整除

    php - 使用 php 变量的查询语法以从两个 MySQL 表中进行选择

    php - 使用 SVN 对 PHP 站点进行版本控制的最佳方法是什么?

    php - PHP 中 str_replace 的性能

    java - 如何使用java访问我电脑中的另一台电脑mysql数据库(距离50公里)