我有两种类型的记录,一种以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";
因此,要确认我需要混合排序的记录,以便它们按字母顺序排列,无论它是公司还是名称。
感谢您的帮助
答案 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 Baker建议的COALESCE()
选项可能实际上更快:
SELECT * FROM refs ORDER BY COALESCE(a_s_name, company_a) ASC