我想看到跟随我或其他用户的所有用户。
我已经使用了3张桌子
用户
user_follow
图片
我尝试上传最后一张图片的用户名,我还需要我的和关注者状态,看看我是否已经关注他们或者没有。
我的查询是在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。现在我得到一个跟随行ID,如果“跟随”,如果没有则为空。如果你告诉我如何优化我的查询,我也会很高兴。
答案 0 :(得分:1)
UVP - 正在查看该页面的用户。 FBV - 正在查看关注者列表\用户列表的用户。 如果UVP不跟随FBV,那么下面查询的最后一个col将给出 0 1 。 优化查询将很困难 1)你想要col(transpose)中的行数据{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>;