Php mysql按多列不同方向排序

Php mysql按多列不同方向排序,php,mysql,Php,Mysql,我有一张桌子 表结构是 现在我运行查询 SELECT * FROM `studentregistrations` ORDER BY `studentregistrations`.`studentID` DESC, `studentregistrations`.`studentName` 我得到的结果是 我想解释一下它是如何工作的。因为我搞不清楚它应该给出的结果,比如studentID是降序的,而studentName是升序的 我检查了下面的答案,但没有得到任何正确的解释 使用多列进行排

我有一张桌子

表结构是

现在我运行查询

SELECT * FROM `studentregistrations`
ORDER BY `studentregistrations`.`studentID`  DESC, `studentregistrations`.`studentName`
我得到的结果是

我想解释一下它是如何工作的。因为我搞不清楚它应该给出的结果,比如
studentID
是降序的,而
studentName
是升序的

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


使用多列进行排序时,第二列的顺序仅影响第一列中两个或更多值相等时的顺序。如果第一列中的所有值都是唯一的,那么其他顺序列就无关紧要了。

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


你不可能让你的两个order by全部兑现,因为那样会有行/列不匹配。

我想你的期望是,列是独立排序的,因此所有学生姓名都是按字母顺序排列的,所有学生ID都是按降序排列的,独立于姓名。如果发生这种情况,您将得到学生id位于错误名称旁边的结果,幸运的是,这种情况不会发生

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

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

例如,使用

ORDER BY UniversityId, StudentName

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

这里您首先按降序ID排序,如果ID相同,则按名称排序。由于id不能相同,第二个顺序是无用的。“…它应该给出结果,就像studentID是降序的,studentName是升序的。”-写下你的期望,你期望这个输出是怎样的。这是一个数据库,每一行都是一致的,每个字段都属于某一行。但看起来您希望每一列都是单独的。那就不是DB任务了。@ksimka:是的。你是对的。我也这么认为,但在阅读我在回答中提到的答案时,我认为这个问题也会起作用。不,它不会起作用。假设你有一个字母表,一列代表数字,另一列代表字母。所以通常它看起来像1-A,2-B,3-C,4-D。。。突然,你想在你的问题中这样排序。你期待什么?23-A,22-B,21-C。。。?这是什么样的数据?这是干什么用的?你打破了一致性。@ksimka:是的。明白你的意思了。所以实际上你是说我对
名字和
姓氏进行了这种查询,那么这应该很重要。@urfusion,是的,如果有重复的名字,那就很重要了。很好的解释。谢谢