gpt4 book ai didi

mysql - 需要帮助优化 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 14:27:12 25 4
gpt4 key购买 nike

我想查看关注我或其他用户的所有用户。

我已经用了3张 table

用户

  • ID
  • 用户名

用户关注

  • ID
  • 用户 ID
  • follow_id
  • 日期

图像

  • ID
  • 用户 ID
  • 图像

我尝试获取最后上传图片的用户名,并且我还需要我的和关注者状态来查看我是否已经关注他们。

我的查询是写在Mysql上的:

SELECT 
u.id AS user_id,
u.username,
i.image,
t.id AS STATUS
FROM
users AS u
INNER JOIN (user_follow AS f)
ON (u.id = f.user_id)
LEFT OUTER JOIN images i
ON i.id =
(SELECT
b.id
FROM
images AS b
WHERE f.user_id = b.user_id
ORDER BY b.id DESC
LIMIT 1)
LEFT OUTER JOIN user_follow t
ON t.id =
(SELECT
m.id
FROM
user_follow m
WHERE user_id = 3
AND follow_id = u.id)
WHERE f.follow_id = 7
AND f.user_id NOT IN (7, 3)
GROUP BY f.user_id

我的用户 ID - 3;我观察关注 id - 7 的用户

输出是:

Array
(
[0] => Array
(
[user_id] => 6
[username] => 6666
[image] => flw3utn9igiqh7dtt2o61ydf8_174.jpeg
[status] => 226
)

)

我认为我的查询太高,我不知道如何简单检查状态并输出 1 或 0 。现在,如果“follow”,我会得到一个follow line id,如果没有,我会得到一个空。如果您向我展示如何优化我的查询,我也会很高兴。

最佳答案

UVP - 正在查看页面的用户。FBV - 正在查看其个人资料\关注者列表的用户。如果 UVP 未遵循 FBV,则以下查询的最后一列将给出 0,否则为 1。优化查询会很困难1)你想要col(转置){first LOJ}中的行数据2) 您有 2 个表,其中数据可能存在也可能不存在 {next 2 LOJ}

      select *,(case when (uf3.id is not null) then 'follow' else null end) aa 
from users u
left outer join
(Select * from
user_follow
where user_id = <FVP>
and follow_id =<UVP>) uf3 on uf3.user_id = u.id
left outer join
(select * from images where user_id = <FBV> ORDER BY id DESC
LIMIT 1) i
on i.user_id = u.id
left outer join
(Select *
from user_follow
where user_id =<FVP>
and follow_id !=<UVP>) uf on uf.user_id = u.id
where u.id =<FBV>;

关于mysql - 需要帮助优化 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10732668/

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