Mysql选择sleep然后返回

时间:2016-11-24 20:27:07

标签: mysql sleep

我希望从数据库中选择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);

等等...

我怎样才能实现这个目标?

2 个答案:

答案 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来达到无效条件时进行控制。