gpt4 book ai didi

php - MySQL 多重排序(嵌套)

转载 作者:行者123 更新时间:2023-12-01 00:21:06 24 4
gpt4 key购买 nike

一个奇怪的问题,因为它正在工作,但我不明白为什么。我希望了解为什么这是有效的。我已经在网络和 stackOverflow 上搜索了答案,但找不到(我通过反复试验得出了这段代码......)

我一直在尝试按 3 列排序。

我想将前两列的结果混合在一起,但首先是所有结果按第三列(日期)排序

这是基本的数据库表结构:

  • 主页 = bool 值,
  • FeaturedProfile = bool 值
  • 姓名 = 字符串
  • 修改日期 = 日期

注意:HomePage 和 FeaturedProfile 都可以为 0(因此任何同时为 0 的结果都应该低于(并且是!))

这是有效的 SQL 代码:

SELECT DISTINCT
HomePage, Profile, Name
FROM tProfiles
ORDER BY (HomePage = 0 AND FeaturedProfile = 0), e.DateModified DESC

这是我不理解的 ORDER BY,因为我的逻辑会说使用 1 而不是 0 + 我不确定括号在做什么,因为我认为下面会起作用(比如在 PHP 中SUM),对我来说似乎更合乎逻辑。

ORDER BY (HomePage, FeaturedProfile), e.DateModified DESC

希望这个问题被允许,因为它困扰着我为什么这是有效的,我想了解这个以供将来引用....

提前致谢,我很乐意为任何可以帮助我理解这一点的人打上标记!

最佳答案

ORDER BY 子句中的第一个表达式,即:

(e.HomePage = 0 AND e.FeaturedProfile = 0)

是MySQL的简写,相当于ANSI标准:

 CASE WHEN (e.HomePage = 0 AND e.FeaturedProfile = 0) THEN 1
WHEN (e.HomePage IS NOT NULL AND e.FeaturedProfile IS NOT NULL) THEN 0
ELSE NULL
END

该表达式后面省略了 ASC/DESC 关键字,因此它默认为 ASC(升序)。

最终结果是行将按以下顺序返回:

第一: bool 表达式返回 0 (FALSE) 的行(即,两列均具有非 NULL 值且任一列(或两列)均具有非零值的任何行。)

后跟: bool 表达式返回 1 (TRUE) 的行(即两列均具有零值的任何行)

后跟其中任一列为 NULL 的行。


你是对的,还有其他方法可以达到相同的结果。例如:

ORDER BY (e.HomePage AND e.FeaturedProfile), e.DateModified DESC

ORDER BY 子句中的第一个表达式被评估为 bool 表达式。意思是一样的:如果任一列为 NULL,则结果为 NULL。否则,如果任一列为 FALSE(具有零值),则结果为 FALSE (0)。否则结果将为 TRUE (1)。该表达式的结果按升序排序。

如果以那种确切的方式处理 NULL 值并不重要,如果我们真正感兴趣的是获取 HomePage 或 FeaturedProfile 为非零的行:

ORDER BY (e.HomePage OR e.FeaturedProfile) DESC, e.DateModified DESC

这略有不同。例如,如果 HomePage 为 1 且 FeaturedProfile 为 NULL,则表达式的计算结果为 1,并且该行将首先排序。 (在这种情况下,原始数据将返回 NULL,并且该行将排在最后。)

关于php - MySQL 多重排序(嵌套),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227762/

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