gpt4 book ai didi

mysql - 根据条件首先对选定 ID 进行排序的 SQL 语句

转载 作者:行者123 更新时间:2023-11-29 03:10:02 31 4
gpt4 key购买 nike

我有以下表格:

团队成员

userid
teamid

用户

uid
name_f
name_l

friend

friend_id
friend_one
friend_two

我使用以下语句来选择属于某个团队的用户的uid 和profile_pic。

SELECT DISTINCT u.uid, u.profile_pic
FROM friends f, users u, team_members m
WHERE m.teamid =$team_var
AND u.uid = m.userid

我还必须运行以下命令来选择用户的 uid 和 profile_pic 与登录用户 friend 并且属于某个团队

SELECT DISTINCT u.uid, u.profile_pic
FROM friends f, users u, team_members m
WHERE m.teamid =$team_var
AND u.uid = m.userid
AND m.userid = f.friend_two
AND f.friend_one =$session_id

我正在寻找一种方法来加入这两个查询,而不是运行 2 个查询,而是运行一个查询,该查询可以排序并列出与顶部登录用户为好友的用户。所以假设某个团队有 30 个用户,其中 5 个用户是登录用户的 friend ,我想在语句后面的 while 循环中列出前 5 个是其余用户的 friend 随机显示的 25 个。

感谢您的宝贵时间。

最佳答案

这可以通过外连接轻松解决。如果没有显式连接语法,您可能无法使用外部连接。这里:

SELECT
u.uid,
u.profile_pic,
(friend_id IS NOT NULL) AS is_friend
FROM team_members m
INNER JOIN users u ON m.userid = u.uid
LEFT JOIN friends f ON m.userid = f.friend_two AND f.friend_one = $session_id
WHERE m.teamid = $team_var
ORDER BY
is_friend DESC,
m.userid

前两个表使用内部连接连接,因此只返回特定团队的成员(因为我们正在过滤 teamid)。

friends 表外连接到上一个连接的结果。更具体地说,我们加入了friends子集,其中friend_one 是当前用户。返回先前结果集中的所有行,但也会返回 friends 子集中匹配的行。如果不匹配,friends 列将填充 NULL

使用 NULL(或者更确切地说是 NOT NULL)测试,我们可以看到哪个团队成员是 friend ,哪个不是。测试结果作为列返回,也用作输出行的排序标准。

关于mysql - 根据条件首先对选定 ID 进行排序的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982080/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com