加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

php-按日期排序并应承一再的日期时,获取MySQL中的上一个和下一个

发布时间:2021-01-24 22:56:15 所属栏目:编程 来源:网络整理
导读:我已经实行探求其他辅佐来办理这个题目,可是我没有获得.假设我有一张看起来像下面的表格. +----+--------------+------------+| id | date_col | label |+----+--------------+------------+| 1 | 2010-09-07 | Record 1 || 2 | 2010-09-03 | Record 2 || 3

我已经实行探求其他辅佐来办理这个题目,可是我没有获得.假设我有一张看起来像下面的表格.

+----+--------------+------------+
| id | date_col     | label      |
+----+--------------+------------+
| 1  | 2010-09-07   | Record 1   |
| 2  | 2010-09-03   | Record 2   |
| 3  | 2010-08-23   | Record 3   |
| 4  | 2010-08-23   | Record 4   |
| 5  | 2010-08-23   | Record 5   |
| 6  | 2010-08-12   | Record 6   |
| 7  | 2010-08-06   | Record 7   |
| 8  | 2010-08-06   | Record 8   |
| 9  | 2010-08-02   | Record 9   |
| 10 | 2010-08-01   | Record 10  |
+----+--------------+------------+

查询时,我按照date_col对这些记录举办排序,并行使id(或现实上是任何其他恣意列)来辅佐对一再的日期举办排序.

mysql_query("SELECT * FROM table ORDER BY date_col DESC,id DESC");

可是,当我一次只查询个中一个记录时,我但愿有一个上一个和下一个按钮来导航到下一个或上一个记录.我的题目是date_col应承一再的值,因此,譬喻,当次序确定下一个记录时,以下查询对我不起浸染. (假设this_date是date_col值,this_id是我们正在查察的当前记录的id值)

mysql_query("SELECT id FROM table WHERE date_col > this_date ORDER BY date_col DESC,id DESC LIMIT 1");

乃至这对我也不起浸染:

mysql_query("SELECT id FROM table WHERE date_col > this_date AND NOT id=this_id ORDER BY date_col DESC,id DESC LIMIT 1");

以是我要探求的是这样的-假如我正在查察ID为#4的记录,因为它是由date_col DESC ID DESC排序的,因此上一笔记录应为ID#5,下一笔记录应为ID #3,但我完全没有获得这些功效.

有人可以表明怎样使其正常事变吗?任何辅佐深表感激.

最佳谜底 假如您的视图中将具有可用的PREV和NEXT按钮,则将必要一个坚硬的观念基原本在数据模子中举办记录排序.正如您所留意到的,date_col并不能办理题目,由于它应承一再.

您的NEXT(id)观念好像意味着“具有最小ID号的行,其ID号大于当前ID号,而且其日期大于当前行的日期.”不要紧,可是有一个缺陷:PREV(NEXT(id))不必然在全部环境下都便是id.这也许会使您的用户转弯,并也许使您的措施逻辑陷入真正的逆境中,以使工作正常举办.

为什么不简朴地行使序列号?

要得到“下一个”行,请执行

SELECT id FROM table WHERE id = current_id +1

可能,假如不能担保您的身份证号码是持续的,请执行

SELECT min(id) AS id FROM table WHERE id > current_id

假如必需行使下一个按钮表现下一个日期而不是下一行,那么请执行

SELECT id,date_col
  FROM table 
 WHERE id = (   
  SELECT min(id) AS id
    FROM table 
   WHERE date_col > this_date
)

可是,假如这样做,请确保为date_col建设一个索引.全部这些查询的等效版本都可用于PREV按钮.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读