按字母顺序排列2列,混合两列而不是单独排序

时间:2017-09-24 20:43:28

标签: php mysql sorting mysqli

我有两种类型的记录,一种以Owners名称开头,另一种以公司名称开头。

我需要按字母顺序输出所有这些记录。比如这样。

Apple (company)
Bradley (name)
Tim (name)
Xerox (company)

目前所有记录都单独排序,因此首先公司名称排序,然后是名称,这导致了这一点。

Apple (company)
Xerox (company)
Bradley (name)
Tim (name)

这是我当前的查询:

$all = "SELECT * FROM refs ORDER BY a_s_name ASC, company_a ASC"; 

因此,要确认我需要混合排序的记录,以便它们按字母顺序排列,无论它是公司还是名称。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您的问题并不清楚,但我认为您的表实际上是这样的:

+----------+-----------+--------------+-------------+-----+
| a_s_name | company_a | other_column | another_one | ... |
+----------+-----------+--------------+-------------+-----+
| NULL     | Apple     | foo          | bar         | ... |
| Bradley  | NULL      | foo          | bar         | ... |
| Tim      | NULL      | foo          | bar         | ... |
| NULL     | Xerox     | foo          | bar         | ... |
+----------+-----------+--------------+-------------+-----+

如果这是正确的,我按IFNULL()条件排序:

SELECT * FROM refs ORDER BY IFNULL(a_s_name, company_a) ASC

这样,如果a_s_name列包含NULL值,则company_a的值将用于排序。

如果您的列不包含NULL值但是空字符串,则可以改为使用通用IF()

SELECT * FROM refs ORDER BY IF(a_s_name = '', company_a, a_s_name) ASC

修改:对于NULL - 值,Mark Ba​​ker建议的COALESCE()选项可能实际上更快:

SELECT * FROM refs ORDER BY COALESCE(a_s_name, company_a) ASC