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