我正在努力实现以下目标:
我有一个 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
请注意,从 CASE
到 END
的整个 block 将被视为一个“单元”。其结果就是您要排序的内容(因此 ASC
出现在 block 之后,而不是在 block 内部)...
关于php - 你可以在 ORDER BY 中添加 if 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3550942/