簡體   English   中英

有條件地按另一列排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM