我有一个包含 600 多行的数据库,但每小时只能检索/显示 100 行。所以我用
select * from table ORDER BY id DESC LIMIT 100
检索前 100 个。如何编写一个脚本,每 1 小时批量检索 100 个数据,以便我可以在 cron 作业中使用它?
最佳答案
可能的解决方案。
- 添加一个字段来标记记录已显示。
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/