php - 你可以在 ORDER BY 中添加 if 语句吗?

标签 php mysql sorting

我正在努力实现以下目标:

我有一个 ORDER BY 语句,它可能会根据 A 列中存储的值而有所不同。

例如:

如果类型是成员,则按成员姓氏排序 如果类型是组,则按组名排序

都按升序排列。

我对最终陈述的最佳猜测是:

SELECT * 
  FROM table 
 WHERE STATUS = 'Active' 
 ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC

我知道这是不正确的,但在其他地方找不到信息。有什么想法吗?

最佳答案

好吧,您可以使用 IF function在 MySQL 中(注意对 function 的强调,因为还有一个不相关的 IF statement )...:

ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC

但是,在这种情况下,CASE statement 似乎是更好的选择(从灵 active 的角度来看)。 :

ORDER BY 
    CASE `type` 
        WHEN 'Member' THEN LNAME 
        WHEN 'Group' THEN GROUPNAME
        ELSE 1 END 
    ASC

请注意,从 CASEEND 的整个 block 将被视为一个“单元”。其结果就是您要排序的内容(因此 ASC 出现在 block 之后,而不是在 block 内部)...

关于php - 你可以在 ORDER BY 中添加 if 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3550942/

相关文章:

javascript - 如何从 while 循环获取当前价格

php - 从 Javascript 同一文件调用 php 函数

algorithm - 每种排序算法什么时候使用?

Java 二维数组逻辑实现

php - DynamoDb batchGetItem 和分区键和排序键

mysql - 使用group_concat获取多行的mysql结果

mysql - 使用mysql在django模型charfield中获取空白语句

mysql - Admin多属性MYSQL如何高效连接

sorting - 将 ISO 8601 日期向前或向后排序

javascript - 为什么没有响应数据,为什么我的 AngularJS 应用程序中的变量未解析?