2016-02-03 116 views
0

我有表。mysql按多列顺序排列不同方向

表结构

enter image description here

现在我运行查询

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

而且我得到的结果是

enter image description here

我想解释如何这是工作。因为我很困惑,它应该给出像studentID结果降序和studentName是按升序排列。

我检查下面的答案,但没有得到任何适当的解释

mysql query order by multiple items

PHP MySQL Order by Two Columns

+2

在这里,你是**第一**按降序ID排序,然后按名称排列,以防id相同。由于id不能相同,第二个排序是无用的。 “ – Brewal

+0

”...它应该给出像studentID这样的结果,降序和studentName是升序。“ - 写下你的期望,你如何期待这个结果。它是一个数据库,每一行都是一致的,每一个字段都属于某一行。但看起来你想分开每一列。那么这不是数据库任务。 – ksimka

+0

@ksimka:是的。你是对的。我也这么认为,但是当阅读我在答案中提到的答案时,我认为这个查询也会起作用。 – urfusion

回答

4

我认为您的期望是,列是独立排序的,以便所有学生姓名均按字母顺序排列,所有学生ID均按降序排列,与姓名无关。如果发生这种情况,你会得到一个学生ID与错误名称相邻的结果,所幸幸好没有发生。

取而代之,首先按第一列排序,然后按下一列排序。次要排序仅适用于第一列中具有相同值的组。

所以,如果你有10名学生具有相同的ID,那么对于该ID他们的名字将按字母顺序排序。 但由于ID是唯一的,所以二级分类是无用的。

这将是有用的,例如,使用

ORDER BY UniversityId, StudentName 

这样的话,你就必须在同一所大学的所有学生都集中在一起的列表,以及这些群体中,他们是按名称的字母顺序排序。

+0

很好的解释。谢谢 – urfusion

3

排序时使用多列,第二列的顺序仅影响订单时,两个或多个值在第一栏中是相同的。如果第一列中的所有值都是唯一的,则其他顺序列无关紧要。

+0

所以你实际上是在说我为'first_name'和'last_name'运行了这种查询,那么它应该很重要。 – urfusion

+0

@urfusion,是的,如果有重复的first_names,那么它会很重要。 –

1

您的查询第一个按学生ID排序,然后按学生姓名排序。

这是不可能的,你的订单的全部荣誉,因为那么会有行/列不匹配。