所以我为特定查询加入了两个表。在复杂的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,但到目前为止还没有。非常感谢任何答案的解释! 谢谢你的帮助!
答案 0 :(得分:2)
你可以创建两个子查询然后UNION它们。第一个子查询将具有'WHERE FromUserID = $ myid AND NumLikes> 0订购SeenLike ASC,日期DESC'和第二个'WHERE FromUserID!= $ myid ORDER BY PostSeen ASC,Date DESC'。
答案 1 :(得分:1)
您不能通过一个子句订购一半结果,其余通过另一个子句订购。如果你考虑一下,它没有任何意义。
但是,您可以在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