您可以在ORDER BY中添加if语句吗?

2021/01/04 04:41 · php ·  · 0评论

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

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

例如:

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

两者均以升序排列。

我对最终声明的最佳猜测是:

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

我知道这是错误的,但无法在其他地方找到信息。有任何想法吗?

好了,您可以在MySQL中使用该IF 函数(请注意,function因为还有一个不相关的IF语句)...:

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

然而,在这种情况下,它似乎是更好的选择(从灵活性的角度来看)将是CASE语句

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

请注意,从CASE的整个块END将被视为单个“单位”。结果就是您要进行排序的原因(因此,为什么ASC在块之后而不是在块内部)...

使用CASE语句。

来自http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html的示例

SELECT id, first_name, last_name, birthday
FROM table
ORDER BY
-- numeric columns
CASE _orderby WHEN 'id' THEN id END ASC,
CASE _orderby WHEN 'desc_ id' THEN id END DESC,
-- string columns
CASE _orderby WHEN 'first_name' THEN first_name WHEN 'last_name' THEN last_name END ASC,
CASE _orderby WHEN 'desc_first_name' THEN first_name WHEN 'desc_last_name' THEN last_name END DESC,
-- datetime columns
CASE _orderby WHEN 'birthday' THEN birthday END ASC,
CASE _orderby WHEN 'desc_ birthday' THEN birthday END DESC;
本文地址:http://php.askforanswer.com/ninkeyizaiorder-byzhongtianjiaifyujuma.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!