[英]Conditionally order by another column
我通過表中的日期列以及另一個表中的另一列查詢數據庫並進行排序。 這很正常。
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
通過myTable1.dateColumn
進行ORDER。 從上面的當前實現中可以看到, myTable1.dateColumn
,它將始終為ORDER BY myTable1.dateColumn
。
這個問題的Stackoverflow建議標簽是mysql
但實際上我正在使用mysqli
。 就此問題而言,這沒有區別。
您可以將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
您可以在訂單部分中使用功能; 類似於以下內容:
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
您最好提供一些數據樣本和預期結果,但是到目前為止,您可以嘗試:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.