加入2个mysql表,列出所有帖子并查找紧跟某个特定用户(logged inn user)的用户

4smxwvx5  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(214)

我的项目中有两个表。
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合起来吗?如果是,请帮助我,否则让我知道如何解决这个问题。抱歉,问题这么大。我是新来的,所以不知道怎么问问题。任何帮助都将不胜感激。

798qvoo8

798qvoo81#

我觉得你可以尝试一些类似循环的方法,而不是加入表,因为你的followers表只有一行满足你的条件。
所以你为什么不这样做:
1) 从数据库中获取所有帖子。2) 对于您检索到的每一篇文章,从followers表中获取包含您的条件的数据。3) 创建新数组。4) 如果步骤2返回结果,则将followers表数据与post一起合并到新数组。5) 否则将其自身合并到新数组中。
完成每个循环后,试着打印它并用,

echo "<pre>";
print_r($new_array);
exit;

试试这个,如果你需要进一步的帮助请告诉我

相关问题