我希望从数据库中选择X记录(在PHP脚本中),然后在继续接下来的60个结果后休息60秒......
SO:
SELECT * FROM TABLE WHERE A = 'B' LIMIT 60
SELECT SLEEP(60);
....
SELECT * FROM TABLE WHERE A = 'B' LIMIT X **where X is the next 60 results, then**
SELECT SLEEP(60);
等等...
我怎样才能实现这个目标?
答案 0 :(得分:3)
评论太长了。
没有“接下来的60条记录”这样的东西。 SQL表表示无序集。如果没有order by
,SQL语句可以按任何顺序返回结果集 - 甚至可以在不同的执行中以不同的顺序返回。
因此,您首先需要一些东西来保证订购。 。 。也就是说,order by
具有唯一标识每一行的键。
然后,您可以使用offset/limit
来完成您想要的任务。或者,您可以将代码放入存储过程并使用while
循环。或者,您可以在应用程序端执行此操作。
答案 1 :(得分:1)
在PHP中:
<?php
// obtain the database connection, there's a heap of examples on the net, assuming you're using a library like mysqlite
$offset = 0;
while (true) {
if ($offset == 0) {
$res = $db->query('SELECT * FROM TABLE WHERE A = 'B' LIMIT 60');
} else {
$res = $db->query('SELECT * FROM TABLE WHERE A = 'B' LIMIT ' . $offset . ',60');
}
$rows = $db->fetch_assoc($res);
sleep(60);
if ($offset >= $some_arbitrary_number) {
break;
}
$offset += 60;
}
您正在做的是逐渐将限制字段增加60,直到达到限制为止。最简单的方法是使用true
作为条件,然后使用break
来达到无效条件时进行控制。