2012-08-09 44 views
0

該查詢從records表中選擇不比給定日期早的最舊的行。給定的日期是我從records_queue表中查詢的最後一行。查詢的目標是循環遍歷從舊到新的行,爲每個用戶一次返回1行。MYSQL按日期循環移動

SELECT `records`.`record_id`, MIN(records.date_created) as date_created 
FROM (`records`) 
JOIN `records_queue` ON `records_queue`.`user_id` = `records`.`user_id` 
AND record_created > records_queue.record_date 
GROUP BY `records_queue`.`user_id` 

等各個查詢我從records選擇最古老的行min(date_created)並返回下一個最早的排>records_query給定日期較大。查詢不斷返回行,直到達到最新記錄。此時,返回相同的行。如果到達最新的行,我想返回最老的(從底部開始 - 一次完整的旋轉)。這怎麼可能使用1查詢?

+0

你是什麼意思你想「重新啓動」?查詢只是返回一組數據。您可以以任何您想要的方式循環訪問應用程序中的數據。在循環的每次迭代中,您都不必回到數據庫。 – David 2012-08-09 00:31:20

+0

你爲什麼要做循環和重新查詢?您可以按照正確的順序返回結果集。 – 2012-08-09 00:35:19

+0

@大衛我的意思是,如果達到最新的紀錄返回最老的(從最舊的行重新開始) – CyberJunkie 2012-08-09 00:37:45

回答

1

從您發佈的代碼中,發生了兩件事之一。這個查詢返回的是一個完整的記錄集,然後你的應用程序就可以使用它自己的邏輯遍歷它們(如果頁面沒有重新加載或將參數傳遞給PHP代碼,這可能是JavaScript的一些變體,然後用它來選擇記錄以顯示頁面是否每次都重新加載),或者應用程序正在更新records_queue.record_date以恢復下一條記錄 - 儘管我看不到任何限制只會在您發佈的查詢中獲取單個記錄。

無論哪種方式,您都需要修改應用程序邏輯,而不是通過此查詢來實現您要求的結果。

編輯:在更新隊列的代碼段中,快速檢查records_queue.record_date中的值是否等於最新的記錄。如果它運行的東西類似update records_queue set record_date = (select min(theDateColumn from records),而不是當前的邏輯,它只是用正在查看的當前日期更新它。

+0

第二件事情正在發生。獲取單個行然後使用獲取的行更新隊列 - 這是應用程序的目的。我只是不確定如何在最後一個最舊的行被提取時重置隊列。 – CyberJunkie 2012-08-09 01:12:37

+0

@Cyber​​Junkie請參閱編輯。 – Fluffeh 2012-08-09 01:30:50