MYSQL ORDER BY CASE 问题:组合时间戳进行排序
在所呈现的场景中,我们有一个包含四行的表,其中每行包含两个 ID 和两个时间戳。任务是检索所有四行,并以特定方式根据时间戳对它们进行排序。
目标是当 id_one 匹配 27 时优先排序 timestamp_one 列,并在 id_two 匹配 27 时优先排序 timestamp_two 列。预期的输出是对行进行排序,就像两个时间戳列是一个一样。
为了实现这一点,我们可以将现有语句修改为如下:
SELECT id_one, id_two, timestamp_one, timestamp_two FROM tablename WHERE id_one = 27 OR id_two = 27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one WHEN id_two=27 THEN timestamp_two END DESC
在此更新的语句中,当 id_one 为 27 时,我们优先按 timestamp_one 排序;当 id_two 为 27 时,我们优先按 timestamp_two 排序。CASE 语句确保每行使用正确的时间戳列。
结果输出将按如下顺序排序:
------------------------------------------------------------------- | id_one | id_two | timestamp_one | timestamp_two | ------------------------------------------------------------------- | 27 | 35 | 9:30 | NULL | ------------------------------------------------------------------- | 35 | 27 | NULL | 9:33 | ------------------------------------------------------------------- | 27 | 35 | 9:34 | NULL | ------------------------------------------------------------------- | 35 | 27 | NULL | 9:35 | -------------------------------------------------------------------
这满足排序的要求将行视为两个时间戳列为一,对于 id_one 为 27 的行优先考虑 timestamp_one,对于 id_two 为 27 的行优先考虑 timestamp_two。
以上是如何在 MySQL 中使用 CASE 语句按特定 ID 优先级的时间戳对行进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!