我查询数据库并按表中的日期列和另一个表中的另一列查询。这很完美。
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
。这个问题的目的没有区别。
答案 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