gpt4 book ai didi

MySql 带条件排序

转载 作者:行者123 更新时间:2023-11-29 23:13:31 26 4
gpt4 key购买 nike

我有一个包含以下字段的表。

Table
+----+-------+---------+------------+
| id | title | approve | expirydate |
+----+-------+---------+------------+

我想按过期日期过滤行,因为我想首先获取过期日期距今天很远的行(过期日期字段的降序排列),并且如果任何行没有“过期日期”或者它已经过期,则按降序排列id 字段的顺序。

示例(假设今天 == 2015-01-15)

+----+-------+---------+------------+
| id | title | approve | expirydate |
+----+-------+---------+------------+
| 1 | ttle1 | 1 | 2015-01-01 |
+----+-------+---------+------------+
| 2 | ttle2 | 1 | 2015-02-15 |
+----+-------+---------+------------+
| 3 | ttle3 | 1 | |
+----+-------+---------+------------+
| 4 | ttle4 | 1 | 2015-01-20 |
+----+-------+---------+------------+

预期结果

+----+-------+---------+------------+
| 2 | ttle2 | 1 | 2015-02-15 |
+----+-------+---------+------------+
| 4 | ttle4 | 1 | 2015-01-20 |
+----+-------+---------+------------+
| 3 | ttle3 | 1 | |
+----+-------+---------+------------+
| 1 | ttle1 | 1 | 2015-01-01 |
+----+-------+---------+------------+

是否可以在一个 MySQL 查询中获取具有这些条件的值?我真的不知道该怎么做。非常感谢您的帮助:)

最佳答案

select * from `table` order by
ifnull(expirydate>curdate(),0) desc,
if(expirydate>curdate(),expirydate,null) desc,
id desc
  • ifnull(expirydate>curdate(),0) desc 需要在过期之前放置未过期,或者在 expirydate 中放置 nullifnull 需要在 expirydate 中处理 null (expirydate>curdate() return null )与已过期的方式相同(expirydate>curdate() 返回 0)。
  • if(expirydate>curdate(),expirydate,null) desc 需要按降序排列 expirydate 之前未过期的订单,同时不影响过期或 null expirydate 中,通过提供相同的排序值(在本例中为 null,但它可以是给定数据类型的任何其他有效值)。
  • id descid 降序排列。影响已过期或 expirydate 中的 null 以及未过期但具有相同 expirydate 的情况。

关于MySql 带条件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27967239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com