有条件地按另一列排序

时间:2015-04-15 20:14:20

标签: php mysql

我查询数据库并按表中的日期列和另一个表中的另一列查询。这很完美。

SELECT * FROM myTable1 LEFT JOIN myTable2 b ON myTable1.id = b.id WHERE myTable1.id !='foo' ORDER BY myTable1.dateColumn DESC, b.column2 ASC

我想要做的是myTable1.dateColumn订单只有b.column2中没有该特定记录的值。从我上面的当前实现中可以看出,无论如何,它始终是ORDER BY myTable1.dateColumn

此问题的Stackoverflow建议标记为mysql,但实际上我使用的是mysqli。这个问题的目的没有区别。

3 个答案:

答案 0 :(得分:0)

您可以将CASE语句放在ORDER BY

SELECT *
FROM myTable1
LEFT JOIN myTable2 b
    ON myTable1.id = b.id
WHERE myTable1.id != 'foo'
ORDER BY CASE WHEN b.column2 IS NULL THEN 1 ELSE 0 END ASC, myTable1.dateColumn DESC

答案 1 :(得分:0)

您可以在订单部分使用功能;如下所示:

SELECT * FROM myTable1 LEFT JOIN myTable2 b ON myTable1.id = b.id WHERE myTable1.id !='foo'
ORDER BY IF(b.column2 IS NULL,1,0),IF(b.column2 IS NULL,myTable1.dateColumn,NULL) DESC, b.column2 ASC

答案 2 :(得分:0)

您应该更好地提供一些数据样本和预期结果,但到目前为止您可以尝试:

SELECT * FROM myTable1 
LEFT JOIN myTable2 b 
ON myTable1.id = b.id 
WHERE myTable1.id !='foo' 
ORDER BY CASE WHEN b.column2 IS NULL myTable1.dateColumn ELSE NULL END DESC, b.column2 ASC