【问题标题】:mysql order by multiple columns different directionsmysql按多列不同方向排序
【发布时间】:2016-05-12 12:37:38
【问题描述】:

我有桌子。

表结构是

现在我运行查询

SELECT * FROM `studentregistrations`
ORDER BY `studentregistrations`.`studentID`  DESC, `studentregistrations`.`studentName`

我得到的结果是

我想解释一下它是如何工作的。因为我很困惑它应该给出像studentID 是降序的结果,studentName 是升序的结果。

我检查了下面的答案,但没有得到任何正确的解释

mysql query order by multiple items

PHP MySQL Order by Two Columns

【问题讨论】:

  • 这里你首先按ID降序排序,然后按名称排序,以防ID相同。由于id不能相同,所以二次排序没用。
  • "...它应该给出像 studentID 降序和 studentName 升序一样的结果。" ——写下你的期望,你期望这个输出是怎样的。它是一个数据库,每一行都是一致的,每个字段都属于某一行。但看起来你想单独拥有每一列。那么它就不是数据库任务了。
  • @ksimka:是的。你说的对。我也这么认为,但是在阅读我在回答中提到的答案时,我认为这个查询也可以。
  • 不,不会。假设您有一张带有字母的表,一列是数字,另一列是字母。所以通常它看起来像1-A,2-B,3-C,4-D,......突然你想像你的问题一样订购它。你能指望什么? 23-A、22-B、21-C、……?这是什么数据?它是干什么用的?你打破了一致性。
  • @ksimka:是的。明白你的意思。

标签: php mysql


【解决方案1】:

我认为您的期望是列独立排序,以便所有学生姓名按字母顺序排列,所有学生 ID 均按降序排列,独立于姓名。如果发生这种情况,您会得到学生 ID 旁边是错误名称的结果,所以幸运的是这不会发生。

相反,它首先按第一列排序,然后按下一列排序。二级排序仅适用于第一列中具有相同值的组。

因此,如果您有 10 名学生具有相同的 ID,那么对于该 ID,他们的姓名将按字母顺序排序。 但是由于ID是唯一的,所以二次排序就没用了。

这会很有用,例如,使用

ORDER BY UniversityId, StudentName

这样,您将拥有一个列表,将同一所大学的所有学生分组在一起,并且在这些组中,他们按姓名的字母顺序排序。

【讨论】:

  • 很好的解释。谢谢
【解决方案2】:

当您使用多列进行排序时,第二列的顺序仅在第一列中两个或多个值相等时才会影响顺序。如果第一列中的所有值都是唯一的,则其他顺序列无关紧要。

【讨论】:

  • 所以实际上你说的是我对first_namelast_name 运行了这种查询,那么它应该很重要。
  • @urfusion,是的,如果有重复的名字,那就很重要。
【解决方案3】:

您的查询首先按学生 ID 排序,然后按学生姓名排序任何“关系”。

不可能同时满足您的两个订单,因为那样会出现行/列不匹配。

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 2023-04-11
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多