MYSQL-按字母顺序对2列进行排序,如果第一列为空,则使用第二列
我试图对mysql数据库按字母顺序进行排序,其中company_name是主要排序,但如果没有company_name,则按last_name排序。我将在下面列出一个例子 公司名称:(主排序列)MYSQL-按字母顺序对2列进行排序,如果第一列为空,则使用第二列,mysql,sorting,Mysql,Sorting,我试图对mysql数据库按字母顺序进行排序,其中company_name是主要排序,但如果没有company_name,则按last_name排序。我将在下面列出一个例子 公司名称:(主排序列) 1 ABC卡车运输 2 Genius加热 3 4个Xtreme窗口 姓氏:(第二栏) 1布莱恩特 2罗杰斯 3燧石 4刘易斯 排序如下: 1 ABC卡车运输 3燧石 2 Genius加热 4个Xtreme窗口 这是可能的,还是我应该将它们合并到一个数组中,并使用php对它们进行排序?只需使用大小写并按顺
1 ABC卡车运输
2 Genius加热
3
4个Xtreme窗口
姓氏:(第二栏)
1布莱恩特
2罗杰斯
3燧石
4刘易斯
排序如下:
1 ABC卡车运输
3燧石
2 Genius加热
4个Xtreme窗口
这是可能的,还是我应该将它们合并到一个数组中,并使用php对它们进行排序?只需使用大小写并按顺序选择一列作为“名称”。最好通过例子来说明
SELECT
CASE WHEN company_name IS NULL THEN last_name ELSE company_name END AS name
FROM mytable
ORDER BY name ASC
如果确实需要,也可以在ORDERBY子句中使用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
编辑:我只假设
公司名称为空
适合您的情况。如果你需要在不同的条件下做这件事,那就是你自己的锻炼。它是空的吗?或者应该将其与”进行比较?借用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
选择
如果(公司名称“”、公司名称、姓氏)作为名称
从mytable
点名
对于IF语句,如果第一个表达式的计算结果为true,则返回第二个表达式,否则返回第三个表达式
如果可能有NULL或blank,则这将起作用:
SELECT
IF(company_name IS NOT NULL AND company_name <> '', company_name, last_name) AS name
FROM mytable
ORDER BY name
选择
如果(公司名称不为空,公司名称为“”、公司名称、姓氏)作为名称
从mytable
点名
您的示例和606723几乎都可以使用。我觉得我错过了一些小东西。输出如下所示。排序如下:1 ABC卡车2 Genius加热4个Xtreme窗口缺少只有姓氏的行。啊,那么它不是空的,它是空的。您可以使用IF语句来实现这一点。我现在正在更新答案。像这样的IF语句(或者它真的是一个函数)真的有什么好处吗?我觉得案例陈述更为普遍正确。老实说,我认为这是一种不好的做法,但也许我不知道什么。不过我确实有一个相关的问题。我需要在while语句中使用我的记录ID。现在唯一可用的数组标识符是$row[name]。我还需要$row[ID]。有什么想法吗?@user606723,如果说普遍正确,你的意思是SQL92,那么是的,我同意,CASE更普遍。我猜他们也会执行相同的操作。如果字段为空,我可以返回并使其为null,或者我可以将其计算为“”。现在这个字段不是空的,它是空的。这个条件就像在where
子句中使用它一样从tablename中选择*,其中company_name=''
,如果这得到所有行的公司名称都为空,那么您将希望使用company_name=''
作为条件。