我正在使用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
我想让我的批处理脚本处理“WAITING”标记的记录,直到达到两列总和(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)。
答案 0 :(得分:1)
如果您正在寻找相同的内容,请试试这个并告诉我。
注意:正如您在问题中提到的那样,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
)
希望这有帮助!