顶级第一个朋友然后其他用户来自列表

时间:2018-03-15 13:26:37

标签: php sql laravel


我有桌子:

likes - id, user_id, like_user_id<br>
users - id, name, email ...,<br>
friends - id, user_id, friend_id, status<br>

是否可以先使用一个SQL查询对其进行排序,然后向其他用户显示朋友。 任何帮助,将不胜感激。 谢谢。

我试过这个并且它有效,但问题是它给了我双重结果的用户:

select * 
from `likes` 
left join `users` on `users.id` = `likes.user_id` 
left join `friends` on `friends.user_id` = `likes.user_id` 
    or `friends.friend_id` = `likes.user_id` 
where `likes.id` = 1 
order by `friends.user_id` = 5 
    or `friends.friend_id` = 5

1 个答案:

答案 0 :(得分:1)

您需要使用此处的UNION 合并喜欢的用户与合作伙伴。完成此操作后,您可以创建一个人工列friend,在好友查询中填充1,在类似查询中填充0。稍后您可以按该栏目订购。

SELECT
    friends.user_id,
    1 as friend,
    users.*
FROM
    friends
    JOIN users ON users.id = friends.friend_user_id
    UNION SELECT
            likes.user_id,
            0 as friend,
            users_liked.*
        FROM
            likes
            JOIN users as users_liked ON likes.like_user_id = users_liked.id
WHERE
    user_id = '$userId'
ORDER BY friend DESC, id ASC

这将返回所有朋友的列表,然后是所有喜欢用户的列表。