2013-04-11 43 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