mysql按多列不同方向排序

时间:2016-02-03 10:48:56

标签: php mysql

我有桌子。

表结构是

enter image description here

现在我运行查询

import os
import datetime

dict_final = {}
for elt in os.listdir('./tags'):
    if os.path.isdir(elt):
        # dict that compiles all filenames with last changes date
        files_stats = {filename: os.stat(os.path.join(elt, filename)).st_mtime
                       for filename in os.listdir(elt)}
        # Extract file changed last
        filename, last_changes = max(files_stats.iteritems(), key=lambda x:x[1])
        dict_final.update({elt: datetime.datetime.fromtimestamp(last_changes)})

print dict_final

我得到的结果是

enter image description here

我想要解释它是如何工作的。因为我感到困惑的是它应该按SELECT * FROM `studentregistrations` ORDER BY `studentregistrations`.`studentID` DESC, `studentregistrations`.`studentName` 降序排列,而studentID按升序排列。

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

mysql query order by multiple items

PHP MySQL Order by Two Columns

3 个答案:

答案 0 :(得分:4)

我认为您的期望是列是独立排序的,因此所有学生姓名都按字母顺序排列,所有学生ID都按降序排列,与名称无关。如果发生这种情况,你会得到一个结果,其中学生ID在错误的名称旁边,所以幸运的是,这不会发生。

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

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

例如,使用

会很有用
ORDER BY UniversityId, StudentName

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

按学生ID查询第一个订单,然后按照学生姓名命令任何“关系”。

完全尊重你的两个订单是不可能的,因为那时会出现行/列不匹配。