2013-04-11 41 views
0

我有這樣的一個表:選擇行一定的ID

+----------------+------------------------------+ 
| product_id |  product_date_added  | 
+-----------------------------------------------+ 
|  2380  |  2012-07-19 00:00:00  | 
|  2379  |  2012-07-19 00:00:00  | 
|  2376  |  2012-07-19 00:00:00  | 
|  2378  |  2012-07-19 00:00:00  | 
|  2375  |  2012-07-19 00:00:00  | 
|  2370  |  2012-07-19 00:00:00  | 
|  2371  |  2012-07-19 00:00:00  | 
|  2381  |  2012-07-03 00:00:00  | 
|  ...  |    ...    | 
+----------------+------------------------------+ 

我需要做的就是找回5行,其中$date <= '2012-07-19 00:00:00'。然後,我想上傳我的清單,其中有下一個5行,其中$date <= '$Last_Retrieved_Product_Date'其中$Last_Retrieved_Product_Date是我檢索的最後一個產品的product_date_added

問題是,因爲它們全都有相同的日期(不幸的是它們都沒有小時 - 分鐘 - 秒),所以這個查詢將每次檢索相同的5行。

我試過的是$date < '2012-07-19 00:00:00',但是這會跳過,看着我的表格,ids和2371直接去了2381

我也嘗試選擇行,其中$date <= '$Last_Retrieved_Product_Date' AND product_id != 'Last_Product_ID'但這會讓我第一次檢索2380, 2379, 2376, 2378, 2375,第二次2379, 2376, 2378, 2375 2370,所以我仍然會重複。

是否有SQL聲明,這將使我檢索所有的products_id後的某個值?

例如,我可以按日期排序,然後在$Last_Retrieved_Product_ID之後選擇5行。

請注意,ID未被排序,這意味着最新的product_date_added不對應最高的product_id

編輯

我沃爾德想有作爲輸出。

首先查詢 SELECT * FROM table Where product_date_added <= '2012-07-19 00:00:00' 輸出:

+----------------+------------------------------+ 
| product_id |  product_date_added  | 
+-----------------------------------------------+ 
|  2380  |  2012-07-19 00:00:00  | 
|  2379  |  2012-07-19 00:00:00  | 
|  2376  |  2012-07-19 00:00:00  | 
|  2378  |  2012-07-19 00:00:00  | 
|  2375  |  2012-07-19 00:00:00  | 
+----------------+------------------------------+ 

第二個查詢 SELECT * FROM table Where product_date_added <= 'Last_Retrieved_Product_Date'

哪裏Last_Retrieved_Product_Date是行的product_date_addedproduct_id = '2375'

輸出所需:

+----------------+------------------------------+ 
| product_id |  product_date_added  | 
+-----------------------------------------------+ 
|  2370  |  2012-07-19 00:00:00  | 
|  2371  |  2012-07-19 00:00:00  | 
|  2381  |  2012-07-03 00:00:00  | 
|  ...  |    ...    | 
+----------------+------------------------------+ 

實際產出:

+----------------+------------------------------+ 
| product_id |  product_date_added  | 
+-----------------------------------------------+ 
|  2380  |  2012-07-19 00:00:00  | 
|  2379  |  2012-07-19 00:00:00  | 
|  2376  |  2012-07-19 00:00:00  | 
|  2378  |  2012-07-19 00:00:00  | 
|  2375  |  2012-07-19 00:00:00  | 
+----------------+------------------------------+ 

我使用phpMyAdmin。

+0

你提到了2373,但是你沒有在你的數據中顯示出來:)說實話,我的目光掠過,試圖瞭解你需要的東西。也許向我們展示期望的輸出?並讓我們知道SQL的味道。 – 2013-04-11 09:53:05

+2

有一種方法可以在大多數數據庫中執行top n查詢,但在編寫查詢之前,您必須知道top n的基礎。你似乎還沒有想到。也許你應該問那個給你模糊規範的人。 – 2013-04-11 09:56:04

+0

@MFFuzzyButton你是對的,我的意思是'2381',我編輯了我的問題來展示我期望的和我得到的。 @DanBracuk我想過使用'TOP'(在我的例子中,phpmyadmin,我認爲它是'LIMIT'),但是我怎樣才能在'product_id'值後面選擇'TOP 5'行? – 2013-04-11 10:04:07

回答

0

我發現與LIMIT都可以設置上限和下限。所以,我只是需要做的:

SELECT * FROM table Where product_date_added <= '2012-07-19 00:00:00' LIMIT 0, 5 

而進入第二個查詢:

SELECT * FROM table Where product_date_added <= '2012-07-19 00:00:00' LIMIT 5, 10 

感謝Dan Bracuk的意見。

+0

我可以在第5行之後得到數據直到表格結束嗎? – 2018-01-15 16:35:07