2016-11-24 80 views
-2

我想選擇X記錄從數據庫(在PHP腳本),然後睡60秒繼續下一個60周後的結果...Mysql的選擇睡眠,然後返回

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); 

等。 ..

我該如何做到這一點?

+1

爲什麼你想睡60秒?你不能睡在MySQL裏面,但你可以在php/java/c#/ perl等中。 –

+0

我想在php腳本中使用 – wpdaniel

+1

見下面,但你仍然沒有回答你爲什麼需要延遲60秒。 –

回答

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逐漸遞增限制字段,直到你達到一個極限。最簡單的方法是在while循環中使用true作爲條件,當您達到無效條件時使用break

+0

極其危險的答案,假設SQL查詢每次都會以相同的順序返回相同的結果,沒有'ORDER BY'。 –

+0

它幾乎只是psuedocode我希望問問題的人至少會做一些研究。 –

3

這是太長的評論。

沒有「接下來的60條記錄」這樣的事情。 SQL表格代表無序集合。沒有order by,SQL語句可以按任何順序返回結果集 - 甚至在不同的執行過程中以不同的順序執行。

因此,你首先需要一些東西來保證排序。 。 。也就是帶有唯一標識每行的鍵的order by

然後,您可以使用offset/limit來完成你想要的。或者,您可以將代碼放入存儲過程,並使用循環while。或者,你可以在應用程序方面做到這一點。

+0

這是一個不正確的斷言。它們是有序集合,其中主鍵自動增加字段。沒有它,表格按最左邊一列排列在最右邊。 –

+0

我想要一個PHP腳本 – wpdaniel

+0

@JustinMitchell。 。 。你能否提供文檔參考文獻,指出'select' * without *'order by'保證以特定順序返回結果。 –