我正在尝试按字母顺序对我的mysql数据库进行排序,其中company_name是主要排序,但如果没有company_name,则按last_name排序。我将在下面列出一个例子。
company_name :(主要排序列)
1 ABC卡车运输
2天才加热
3
4 Xtreme Windows
last_name :(二级列)
1布莱恩特
2罗杰斯
3火石
4刘易斯
这样的分类:
1 ABC卡车运输
3火石
2天才加热
4 Xtreme Windows
这是否可能,或者我应该将它们合并到数组中并使用php对它们进行排序?
答案 0 :(得分:6)
使用案例和顺序选择列作为'名称'。以示例最佳显示。
SELECT
CASE WHEN company_name IS NULL THEN last_name ELSE company_name END AS name
FROM mytable
ORDER BY name ASC
如果你真的想,你也可以在order by子句中使用case语句 我认为上面的问题确实是一个更好的解决方案,因为你甚至不再拥有php中的逻辑,但你可能不同意。
SELECT company_name, last_name
FROM mytable
ORDER BY CASE WHEN company_name IS NULL THEN last_name ELSE company_name END ASC
编辑:我只假设company_name IS NULL
对你来说是正确的。如果你需要在不同的条件下这样做,那就是你自己的运动。它是空的吗?或者应该将其与''
进行比较?
答案 1 :(得分:1)
借用user606723的答案,但展示了如何在MySQL中更常用,即使用IFNULL()
。
IFNULL()返回第一个表达式,除非第一个表达式为null,否则它将返回第二个表达式。它专为这些类型的场景而设计。
SELECT
IFNULL(company_name, last_name) AS name
FROM mytable
ORDER BY name
修改强>
如果company_name持有空格而不是NULL,那么你可以这样做:
SELECT
IF(company_name <> '', company_name, last_name) AS name
FROM mytable
ORDER BY name
使用IF语句,如果第一个表达式的计算结果为true,则返回第二个表达式,否则返回第三个表达式。
如果您可能有NULL或空白,那么这将起作用:
SELECT
IF(company_name IS NOT NULL AND company_name <> '', company_name, last_name) AS name
FROM mytable
ORDER BY name