簡體   English   中英

Mysql ORDER BY多列IF AND

[英]MySql ORDER BY multiple columns IF AND

因此,我針對特定查詢加入了兩個表。 經過復雜的SELECT狀態后,該表看起來像這樣:$ myid = 3

PostID | FromUserID | To User ID|Date     | PostSeen | NumLikes  |SeenLike
61     |     48     |     3     | 5/11/13 |    1     |     1     |  1
59     |     3      |     3     | 4/11/13 |    1     |     1     |  0
58     |     3      |     3     | 4/11/13 |    1     |     1     |  1
25     |     47     |     3     | 3/11/13 |    1     |     2     |  0
53     |     56     |     3     | 2/11/13 |    0     |     3     |  1
21     |     3      |     55    | 1/11/13 |    1     |     0     |  null
20     |     56     |     3     | 30/10/13|    1     |     0     |  null
18     |     47     |     3     | 29/10/13|    0     |     0     |  null

如果NumLikes等於0,則SeenLike列為空。 PostSeen始終為0或1。我在此處以簡化格式輸入了日期,但使用了正確的DateTimed。

本質上,我想做的事情等同於

if(FromUserID == $myid && NumLikes > 0){
ORDER BY SeenLike ASC, Date DESC
}
if (FromUserID != $myid) {
ORDER BY PostSeen ASC, Date DESC
}

(我知道這是完全錯誤的,只是模糊地說明了我的目標),以便對結果進行排序,如下所示:

PostID | FromUserID | To User ID|Date     | PostSeen | NumLikes  |SeenLike
59     |     3      |     3     | 4/11/13 |    1     |     1     |  0
25     |     47     |     3     | 3/11/13 |    1     |     2     |  0
53     |     56     |     3     | 2/11/13 |    0     |     3     |  1
18     |     47     |     3     | 29/10/13|    0     |     0     |  null
61     |     48     |     3     | 5/11/13 |    1     |     1     |  1
58     |     3      |     3     | 4/11/13 |    1     |     1     |  1
21     |     3      |     55    | 1/11/13 |    1     |     0     |  null
20     |     56     |     3     | 30/10/13|    1     |     0     |  null

我將如何去做呢? 我已經嘗試過IF和CASE,但到目前為止都沒有用。 還要感謝對任何答案的解釋! 謝謝你的幫助!

您可以創建兩個子查詢,然后對其進行UNION。 第一個子查詢將具有“ WHERE FromUserID = $ myid AND NumLikes> 0 ORDER BY SeenLike ASC,日期DESC”和第二個“ WHERE FromUserID!= $ myid ORDER BY PostSeen ASC,日期DESC”。

您不能按一個子句對結果的一半排序,而不能按另一子句對其余結果的排序。 如果您考慮一下,那沒有任何意義。

但是,您可以在order子句中使用任何類型的表達式,如布爾值或整數

例如

ORDER BY FromUserID = $myid desc, -- this will be true or false depending on the fromuserid
    (FromUserID = $myid)*SeenLike ASC, --this will be 0 if fromuser is not equal to myid or =seenlike otherwise
    (FromUserID != $myid)*PostSeen ASC, -- and so on
    Date DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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