Php MYSQL查询-获取当前用户';s posts和用户';他';以下职位
我正在尝试查询以获取当前用户的帖子以及他正在跟踪的人的帖子。就像大多数社交网络在主页上做的那样 我知道如何查询当前用户的所有帖子,但我很难获得用户的帖子,他正在关注的帖子 我看到了另一个问题 但是答案并没有真正帮助我 以下是我目前的疑问:Php MYSQL查询-获取当前用户';s posts和用户';他';以下职位,php,mysql,Php,Mysql,我正在尝试查询以获取当前用户的帖子以及他正在跟踪的人的帖子。就像大多数社交网络在主页上做的那样 我知道如何查询当前用户的所有帖子,但我很难获得用户的帖子,他正在关注的帖子 我看到了另一个问题 但是答案并没有真正帮助我 以下是我目前的疑问: SELECT P.id, P.caption, P.date, U.id, U.fullname, U.username, F.IdOtherUser FROM USERS AS U INNER JOIN Activity AS F ON U.id = F.
SELECT P.id,
P.caption,
P.date,
U.id,
U.fullname,
U.username,
F.IdOtherUser
FROM USERS AS U
INNER JOIN Activity AS F
ON U.id = F.id
INNER JOIN Posts AS P
ON P.id = U.id OR P.id = F.IdOtherUser
WHERE P.id = 145
ORDER BY P.id DESC
145=当前用户
Activity.IdOtherUser=用户“145”正在跟踪
Activity.id=将是当前用户的“145”
如果有人能帮我解决这个问题,我将不胜感激
我似乎不能完全理解它,因为我对MYSQL还很陌生
修复
(SELECT P.id as postid,
P.caption,
P.date,
U.id as userid,
U.fullname,
U.username,
coalesce(Activity.LikeCNT,0),
Activity.CurrentUserLiked
FROM USERS AS U
INNER JOIN Posts AS P
ON P.id = U.id
LEFT JOIN (SELECT COUNT(DISTINCT Activity.uuidPost) LikeCNT, Activity.uuidPost, Activity.id, sum(CASE WHEN Activity.id = 145 then 1 else 0 end) as CurrentUserLiked
FROM Activity Activity
WHERE type = 'like'
GROUP BY Activity.uuidPost) Activity
ON Activity.uuidPost = P.uuid
AND Activity.id = U.id
WHERE U.id = 145)
UNION
(SELECT P.id,
P.caption,
P.date,
U.id,
U.fullname,
U.username,
coalesce(Activity.LikeCNT,0),
Activity.CurrentUserLiked
FROM Activity AS A
INNER JOIN USERS AS U
ON A.IdOtherUser=U.id
INNER JOIN Posts AS P
ON P.id = U.id
LEFT JOIN (SELECT COUNT(DISTINCT Activity.uuidPost) LikeCNT, Activity.uuidPost, Activity.id, sum(CASE WHEN Activity.id = 145 then 1 else 0 end) as CurrentUserLiked
FROM Activity Activity
WHERE type = 'like'
GROUP BY Activity.uuidPost) Activity
ON Activity.uuidPost = P.uuid
AND Activity.id = U.id
WHERE A.id = 145)
为了获得给定用户(id=145)的所有帖子和它关注帖子的所有用户,以及每个帖子的用户详细信息,我将重写查询以使用
union
而不是or,从而简化逻辑。第1个选择获取给定用户的帖子,第2个选择获取以下用户的帖子:
(SELECT P.id as postid,
P.caption,
P.date,
U.id as userid,
U.fullname,
U.username,
FROM USERS AS U
INNER JOIN Posts AS P ON P.userid = U.id
WHERE U.id = 145)
UNION
(SELECT P.id,
P.caption,
P.date,
U.id,
U.fullname,
U.username,
FROM Activity AS A
INNER JOIN USERS AS U ON A.IdOtherUser=U.id
INNER JOIN Posts AS P ON P.userid = U.id
WHERE A.id = 145)
ORDER BY postid DESC
假设:
为了获得给定用户(id=145)的所有帖子和它关注帖子的所有用户,以及每个帖子的用户详细信息,我将重写查询以使用
union
而不是or,从而简化逻辑。第1个选择获取给定用户的帖子,第2个选择获取以下用户的帖子:
(SELECT P.id as postid,
P.caption,
P.date,
U.id as userid,
U.fullname,
U.username,
FROM USERS AS U
INNER JOIN Posts AS P ON P.userid = U.id
WHERE U.id = 145)
UNION
(SELECT P.id,
P.caption,
P.date,
U.id,
U.fullname,
U.username,
FROM Activity AS A
INNER JOIN USERS AS U ON A.IdOtherUser=U.id
INNER JOIN Posts AS P ON P.userid = U.id
WHERE A.id = 145)
ORDER BY postid DESC
假设:
嗯,这个答案似乎不正确
T.postID='$uid'/$uid保存当前登录用户的id
->postID是帖子的id,而不是用户的id。你也有同样的问题:P.id与电流无关user@Shadow哦,那么它应该是u.id=145吗?是的,没错。好地方@我不知道为什么它返回94个结果,而它应该是25个?我希望你不要期望我是一个读心术的人,可以在不知道你的数据的情况下回答这个问题!嗯,这个答案似乎不正确T.postID='$uid'/$uid保存当前登录用户的id
->postID是帖子的id,而不是用户的id。你也有同样的问题:P.id与电流无关user@Shadow哦,那么它应该是u.id=145吗?是的,没错。好地方@我不知道为什么它返回94个结果,而它应该是25个?我希望你不要期望我是一个读心术的人,可以在不知道你的数据的情况下回答这个问题!好朋友。。别担心,我在它的位置使用了正确的字段名!嘿,我的天,我问你最后一件事。。。你能给我你对我最后一个问题的看法吗?我把它添加到我的问题中了?老实说,我真的不知道你希望得到什么类型的答案。只是它是好的,还是坏的,可能会在将来引起问题…可能是服务器增长的时候?它太长了吗?或者这不重要吗?很棒的朋友。。别担心,我在它的位置使用了正确的字段名!嘿,我的天,我问你最后一件事。。。你能给我你对我最后一个问题的看法吗?我把它添加到我的问题中了?老实说,我真的不知道你希望得到什么类型的答案。只是它是好的,还是坏的,可能会在将来引起问题…可能是服务器增长的时候?它太长了吗?或者这不重要吗?