我有这样的一个表:选择行一定的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_added
与product_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。
你提到了2373,但是你没有在你的数据中显示出来:)说实话,我的目光掠过,试图了解你需要的东西。也许向我们展示期望的输出?并让我们知道SQL的味道。 – 2013-04-11 09:53:05
有一种方法可以在大多数数据库中执行top n查询,但在编写查询之前,您必须知道top n的基础。你似乎还没有想到。也许你应该问那个给你模糊规范的人。 – 2013-04-11 09:56:04
@MFFuzzyButton你是对的,我的意思是'2381',我编辑了我的问题来展示我期望的和我得到的。 @DanBracuk我想过使用'TOP'(在我的例子中,phpmyadmin,我认为它是'LIMIT'),但是我怎样才能在'product_id'值后面选择'TOP 5'行? – 2013-04-11 10:04:07