Mysql按列排列时不为空,然后按其他列排序

时间:2013-07-19 14:46:25

标签: php mysql

我想要一些让我被困了两天的帮助。我需要从数据库中重新计算数据,并在column1不为空时按column2排序,然后按column1 column2 1 11 2 12 3 13 14 15 16

排序结果
1,2,3,14,15,16

必填结果

$SQL = "SELECT * FROM table ORDER BY COALESCE(column1,column2) DESC";

我尝试了很多方法,我最近的失败尝试是

`$SQL = "SELECT * FROM table ORDER BY COALESCE(column1,column2) ASC";

{{1}}

我上面的SQL在column2上面返回NULL值column1

5 个答案:

答案 0 :(得分:3)

这应该有效:

$SQL = "SELECT * FROM table ORDER BY COALESCE(NULLIF(Other,''), column2) DESC";

我在这里看到了:SQL Coalesce with empty string

答案 1 :(得分:1)

coalesce()只有在"空" column1中的值实际上是NULL。空字符串不会触发coalesce()操作。

除此之外,您的查询将无效。您不能使用两列进行select *,并以某种方式神奇地在结果中获得一列。为此,您需要一个UNION查询:

(SELECT column1 AS col FROM yourtable)

UNION ALL

(SELECT column2 AS col FROM yourtable)
ORDER BY col

答案 2 :(得分:1)

老问题,但这个解决方案对我有用:

$SQL = "SELECT * FROM table ORDER BY COALESCE(NULLIF(column1, ''), column2)";

答案 3 :(得分:0)

您应该可以像CASE这样使用:

SELECT *
FROM table
ORDER BY 
CASE WHEN LENGTH(column1) IS >0 THEN column1 
ELSE column2 END 
ASC

http://dev.mysql.com/doc/refman/5.0/en/case.html

答案 4 :(得分:0)

如果您想要1列,可以尝试NULLIFCOALESCE的组合,这应该考虑空值和空值

SELECT COALESCE(NULLIF(column1, ''), column2) AS COL
FROM table

SQLFiddle Demo

如果您确实想要单个结果行上的所有数字(以逗号分隔),您可以使用GROUP_CONCAT以及之前的代码:

SELECT GROUP_CONCAT(COALESCE(NULLIF(column1, ''), column2)) AS col
FROM table

SQLFiddle Demo2