【发布时间】:2018-11-18 21:48:29
【问题描述】:
我的项目中有两个表。
POSTS 表
p_id p_user_id p_title p_description
.................................................
1 1 Post 1 lorem ipsum * 1
2 1 Post 2 lorem ipsum * 2
3 2 Post 3 lorem ipsum * 3
4 3 Post 4 lorem ipsum * 4
FOLLOWERS 表
f_id f_following_users_id f_followed_users_id f_date
...................................................................
1 2 1 2018-01-25
2 2 3 2018-01-25
3 3 2 2018-01-25
现在我想根据登录的用户 ID 获取所有用户的列表。登录用户 id 取自 $_SESSION['user_id']。
我想要的结果如下。
第一种情况:如果登录用户的user_id为1,即$_SESSION['user_id'] = 1,或者第二张表的following_users_id为1,结果应该是:
Array
(
[0] => Array
(
[p_id] => 1
[p_user_id] => 1
[p_title] => Post 1
[p_description] => lorem ipsum * 1
[f_id] =>
[f_following_users_id] =>
[f_followed_users_id] =>
[f_date] =>
)
[1] => Array
(
[p_id] => 2
[p_user_id] => 1
[p_title] => Post 2
[p_description] => lorem ipsum * 2
[f_id] =>
[f_following_users_id] =>
[f_followed_users_id] =>
[f_date] =>
)
[2] => Array
(
[p_id] => 3
[p_user_id] => 2
[p_title] => Post 3
[p_description] => lorem ipsum * 3
[f_id] =>
[f_following_users_id] =>
[f_followed_users_id] =>
[f_date] =>
)
)
数组的最后四个字段应为空,因为具有 user_id 的用户尚未关注任何人
第二种情况:如果登录用户user_id为2,即$_SESSION['user_id'] = 2,或者第二张表的following_users_id为2,结果应该是:
Array
(
[0] => Array
(
[p_id] => 1
[p_user_id] => 1
[p_title] => Post 1
[p_description] => lorem ipsum * 1
[f_id] => 1
[f_following_users_id] => 2
[f_followed_users_id] => 1
[f_date] => 2018-01-25
)
[1] => Array
(
[p_id] => 2
[p_user_id] => 1
[p_title] => Post 2
[p_description] => lorem ipsum * 2
[f_id] => 1
[f_following_users_id] => 2
[f_followed_users_id] => 1
[f_date] => 2018-01-25
)
[2] => Array
(
[p_id] => 3
[p_user_id] => 2
[p_title] => Post 3
[p_description] => lorem ipsum * 3
[f_id] =>
[f_following_users_id] =>
[f_followed_users_id] =>
[f_date] =>
)
)
前 2 个数组的前四个字段应填充关注者表的第一行,因为用户 ID 的用户已关注用户 ID 为 1 的用户。第三个帖子的 4 行应为空白,因为用户 ID 为 2 的用户没有' t 关注 user_id 为 2 的用户**
第三种情况:如果登录用户user_id为3,即$_SESSION['user_id'] = 3,或者第二张表的following_users_id为3,结果应该是:
Array
(
[0] => Array
(
[p_id] => 1
[p_user_id] => 1
[p_title] => Post 1
[p_description] => lorem ipsum * 1
[f_id] =>
[f_following_users_id] =>
[f_followed_users_id] =>
[f_date] =>
)
[1] => Array
(
[p_id] => 2
[p_user_id] => 1
[p_title] => Post 2
[p_description] => lorem ipsum * 2
[f_id] =>
[f_following_users_id] =>
[f_followed_users_id] =>
[f_date] =>
)
[2] => Array
(
[p_id] => 3
[p_user_id] => 2
[p_title] => Post 3
[p_description] => lorem ipsum * 3
[f_id] => 3
[f_following_users_id] => 3
[f_followed_users_id] => 2
[f_date] => 2018-01-25
)
)
前 2 个数组 4 最后一列应该为空,因为 User_id 3 没有关注这些帖子用户。但是第三个数组最后四列应该被填充,因为 user_id 3 已经跟随 user_id 2。
我已经搜索了所有解决方案,但徒劳无功。也许我什至在 Stack Overflow 上都找不到正确的帖子。
我尝试的 MySQL 查询是:
SELECT * FROM posts AS p LEFT JOIN followers AS f ON p.p_user_id=f.f_followed_users_id WHERE f.f_followed_users_id = p_user_id AND f.f_following_users_id = 1 ORDER BY p.p_id
但我没有得到我想要的结果。我尝试使用左连接右连接外部和内部连接。但没有成功。我可以随意加入这两张桌子吗?
【问题讨论】: