Mysql 从最接近某个日期的表中检索前10个结果,并保持升序排序顺序
我有一个包含日历项的表格;在我的web应用程序中,我有两个视图: 视图1:显示接下来10项的主视图,从现在开始 视图2:根据视图1中第一个/最后一个项目的时间戳显示上一个/下一个10个项目的视图。这就是麻烦制造者。 在页面底部,显示了指向视图2的上一个/下一个链接 问题是: 如何在不知道日期的情况下检索前一组10项 起初,这对我来说似乎很简单,但显然不是 数据库表: 用于显示从现在开始的下10项的SQL查询此处没有问题: 基于主视图中第一项的时间戳显示前10项的SQL查询:Mysql 从最接近某个日期的表中检索前10个结果,并保持升序排序顺序,mysql,database,sorting,Mysql,Database,Sorting,我有一个包含日历项的表格;在我的web应用程序中,我有两个视图: 视图1:显示接下来10项的主视图,从现在开始 视图2:根据视图1中第一个/最后一个项目的时间戳显示上一个/下一个10个项目的视图。这就是麻烦制造者。 在页面底部,显示了指向视图2的上一个/下一个链接 问题是: 如何在不知道日期的情况下检索前一组10项 起初,这对我来说似乎很简单,但显然不是 数据库表: 用于显示从现在开始的下10项的SQL查询此处没有问题: 基于主视图中第一项的时间戳显示前10项的SQL查询: 我很可能忽略了什么,
我很可能忽略了什么,所以我需要你的帮助。提前感谢。这是一个简单的问题,限制子查询
SELECT ci.*
FROM `calendar_item` AS `ci`
WHERE (ci.id IN (
SELECT id FROM calendar_item
WHERE (end_time < FROM_UNIXTIME(1334667600))
ORDER BY end_time DESC
LIMIT 10
))
GROUP BY `ci`.`id`
ORDER BY `ci`.`end_time` ASC
LIMIT 10
如果没有子查询中的限制,您将选择时间戳SELECT i.*
FROM (
SELECT ci.*
FROM calendar_item AS ci
WHERE ci.end_time < FROM_UNIXTIME(1334667600)
ORDER BY ci.end_time DESC
LIMIT 10
) AS i
ORDER BY i.`end_time` ASC
遗憾的是,我的MySQL版本不支持限制in/ALL/ANY/SOME子查询。不过,还是要感谢第二个例子!我会尝试那种方法。
SELECT ci.*
FROM `calendar_item` AS `ci`
WHERE (ci.id IN (
SELECT id FROM calendar_item
WHERE (end_time < FROM_UNIXTIME(1334667600))
ORDER BY end_time DESC
))
GROUP BY `ci`.`id`
ORDER BY `ci`.`end_time` ASC
LIMIT 10
SELECT ci.*
FROM `calendar_item` AS `ci`
WHERE ci.end_time <= 1334667600
GROUP BY `ci`.`id`
ORDER BY `ci`.`end_time` ASC
LIMIT 10
SELECT ci.*
FROM `calendar_item` AS `ci`
WHERE (ci.id IN (
SELECT id FROM calendar_item
WHERE (end_time < FROM_UNIXTIME(1334667600))
ORDER BY end_time DESC
LIMIT 10
))
GROUP BY `ci`.`id`
ORDER BY `ci`.`end_time` ASC
LIMIT 10
SELECT i.*
FROM (
SELECT ci.*
FROM calendar_item AS ci
WHERE ci.end_time < FROM_UNIXTIME(1334667600)
ORDER BY ci.end_time DESC
LIMIT 10
) AS i
ORDER BY i.`end_time` ASC