我在PHP中处理一些文件,并使用MySQL来存储结果。下面是我的表格的样子:
tblConverts
:
ID ACCESS_KEY STATUS TOTAL_PAGES PROCESSED_PAGES
---- ------------ ----------- ------------- -----------------
1 upYP5RbNqQ COMPLETED 10 10
2 IeH02qBAtV WAITING 32 18
3 Di5sCWxA2p REJECTED 28 0
4 Aft54Xhr3f WAITING 40 0
5 TzU1VMoeQF WAITING 30 0
我想让我的批处理脚本在"等待"标记的记录上工作,直到它达到两列(TOTAL_PAGES - PROCESSED_PAGES)之和等于100的点。
我实现它的方式是查询:
SELECT * FROM tblConverts WHERE status = 'WAITING' AND TOTAL_PAGES > PROCESSED_PAGES LIMIT 500
然后在PHP脚本中,我做了一个循环,减去行,直到计数器达到100。但是,将SQL和PHP结合使用这种方法并不是一个好主意。如何将此函数实现为单个SQL查询?
:
假设每次执行20页(整行,而不是每行),第一行和第三行不匹配,因此我们将处理第二、第四和第五行。从第二行我们有14页(32 - 18)。因为行#2的剩余页数少于20,它应该寻找下一个。下一个(#4)有40页,所以剩余页面的总和(14 + 40)大于20。因此,它必须在这里停止并返回行(#2和#4)。
请尝试这个,让我知道如果你正在寻找相同的
注意:20是你在问题中提到的限制。你可以根据自己的需要修改。
SELECT
*
FROM
tblConverts
WHERE
ID IN (
SELECT
m1.ID
FROM
tblConverts m1
LEFT JOIN tblConverts m2 ON m1.ID >= m2.ID
WHERE
m1. STATUS = 'WAITING'
AND m2. STATUS = 'WAITING'
GROUP BY
m1.ID
HAVING
SUM(
m2.TOTAL_PAGES - m2.PROCESSED_PAGES
) - SUM(m1.TOTAL_PAGES) / COUNT(m1.TOTAL_PAGES) < 20
)
希望这对你有帮助!