2013-07-23 55 views
0

對不起,標題很難說。調用數據庫的子集,如何在db結尾循環記錄1

使用PDO,我有100條記錄的數據庫。一次選擇隨機數量的記錄並保存上次使用的ID。每次抓取隨機數量的記錄時,它會從保存的ID開始,在上次停止的位置拾取記錄。目前爲止很簡單。

我的問題是,如果最後一個ID使用爲94(100分),記錄的數目是10,我得到未來6 OK。但之後需要重新啓動ID 1並保持循環。

我能確定我在最後一個記錄ID,做一個新的查詢起始於ID爲1,但它似乎有點笨重,有什麼想法就一個更好的方法,我循環的末尾做呢?

爲了阻止重複後關閉,How to get a random range of 10 records from a database without overlapping the end boundary?是關於讓這種情況發生,開始接近尾聲隨機子集。

+0

如果只有100條記錄 - 只需選擇全部,然後在PHP端使用任何邏輯。沒什麼大不了的。 –

+0

@你的常識感謝,但如果它只有100行,這不會是一個大問題,我只是用它作爲例子。 – Steve

+1

總是以** real **設置爲例。你甚至無法想象不同的答案可能會取決於某些細節。 –

回答

2

假設$lastID是上次使用的ID和$myLimit是的,你想要得到的記錄數。

$qry = "SELECT id, field_01, field_02 
    FROM (
     SELECT id, field_01, field_02 
     FROM my_table 
     WHERE id >= {$lastID} 
     LIMIT {$myLimit} 
     UNION 
     SELECT id, field_01, field_02 
     FROM my_table 
     WHERE id < {$lastID} 
     LIMIT {$myLimit} 
    ) tab 
    LIMIT {$myLimit}"; 

此查詢的想法是要做到以下幾點:

  1. ID爲獲取數據到$更多或等於$ lastID,有限myLimit行。
  2. 獲取ID小於$ lastID的數據,僅限於$ myLimit行。
  3. 聯合上述兩個查詢。
  4. 獲取第一個$ myLimit行。

希望這幫助。