因此,我为特定查询连接了两个表。经过复杂的 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
If NumLikes is equal to 0 then the SeenLike column is null. The PostSeen will always be 0 or 1. Ive put the date in a simplified format here, but its proper DateTimed.
Essentially, I want do something that is the equivalent of
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, Date DESC”,第二个子查询“WHERE FromUserID != $myid ORDER BY PostSeen ASC, Date DESC”。
关于php - MySql ORDER BY 多列 IF AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795836/