我的项目中有两个表。
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取自$\u session['user\u id']。
我想要的结果如下。
第一种情况:如果logged-in-users user\u id为1,即$\u session['user\u id']=1,或第二个表中的以下用户\u 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] =>
)
)
数组的最后四个字段应为空,因为用户id为的用户没有跟踪任何人
第二种情况:如果logged-in-users user\u id为2,即$\u session['user\u id']=2,或第二个表中的以下用户\u 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个数组的前四个字段应填充followers表的第一行,因为用户id为的用户跟随了用户id为1的用户。第3个帖子的4行应该为空,因为用户id为2的用户没有跟随用户id为2的用户***
第三种情况:如果logged-in-users user\u id为3,即$\u session['user\u id']=3,或第二个表中的以下用户\u 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最后一列应该为空,因为用户id 3没有跟踪这些用户的帖子。但最后四列的第三个数组应该被填充,因为用户标识3紧跟着用户标识2。
我寻找了所有的解决办法,但都白费了。也许我找不到正确的帖子怎么做,即使在stackoverflow。
我尝试的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
但我没有得到我想要的结果。我尝试了左连接右连接外连接和内连接。但没有成功。我能把这两张table合起来吗?如果是,请帮助我,否则让我知道如何解决这个问题。抱歉,问题这么大。我是新来的,所以不知道怎么问问题。任何帮助都将不胜感激。
1条答案
按热度按时间798qvoo81#
我觉得你可以尝试一些类似循环的方法,而不是加入表,因为你的followers表只有一行满足你的条件。
所以你为什么不这样做:
1) 从数据库中获取所有帖子。2) 对于您检索到的每一篇文章,从followers表中获取包含您的条件的数据。3) 创建新数组。4) 如果步骤2返回结果,则将followers表数据与post一起合并到新数组。5) 否则将其自身合并到新数组中。
完成每个循环后,试着打印它并用,
试试这个,如果你需要进一步的帮助请告诉我