繁体   English   中英

我如何在“内部加入用户”表中关注用户帖子?

[英]How do I Inner Join users table with followed users posts?

我正在尝试从当前用户关注的人员及其详细信息中检索这些帖子。 我一直在研究,加入似乎是正确的方法,但是我不确定这样做有什么问题。

这是我的代码

$queryfeed = "SELECT posts.user_id, posts.body, posts.image, posts.has_image 
FROM posts, follows WHERE posts.user_id =  follows.leader_id 
AND follows.follower_id =$user_id INNER JOIN users ON users.user_id 
= follows.leader_id";

$resultfeed = $db->query($queryfeed);
if($resultfeed->num_rows > 0) {
    while( $rowfeed = $resultfeed->fetch_assoc() ) {       
        if($rowfeed['posts.has_image'] == 1) {
    ?>
            <article class="post">
                <div class="post-head cf">
                    <a class="userpic" href=""><img src="<?php echo $userpic ?>" alt="<?php echo $rowfeed['users.username'] ?>"></a>
                    <a href="" class="username">
                        <?php echo $rowfeed[users.'username']; ?>
                    </a>
                </div>
                <img src="users/user_<?php echo $rowfeed['posts.user_id'] ?>/posts/<?php echo $rowfeed['posts.image']; ?>" alt="">
                <div class="post-body">
                    <div class="post-options">
                        <a class="likes" href="">2 likes</a>
                    </div>
                    <p>
                        <a class="username" href="">
                                <?php echo $rowfeed['users.username'] ?>
                        </a>
                        <?php echo $rowfeed['posts.body'] ?>
                    </p>
                    <hr />
                    <div class="cf">
                        <a class="like hide-text" href="javascript:;">Like This Post</a>
                        <form action="" class="comment">
                            <input type="text" placeholder="Add a comment">
                        </form>
                    </div>
                </div>
            </article>

   <?php } else { ?>

我的桌子看起来像这样

users
user_id | username | avatar

posts
post_id | user_id | body | image | has_image

follows
leader_id | follower_id

从您的原始查询中,我看到您仅对帖子的数据感兴趣(而不是对发布该数据的用户感兴趣)。 我假设$ user_id持有当前用户的ID,即也用作follower_id的值。 在这种情况下,查询变得更容易:

SELECT p.user_id, p.body, p.image, p.has_image
FROM followers f INNER JOIN posts p ON f.leader_id = p.user_id and f.follower_id = $user_id

如果您还对发布者的用户数据感兴趣,请按以下方式更改查询:

SELECT p.user_id, p.body, p.image, p.has_image, u.username, u.avatar
FROM follows f
  INNER JOIN posts p ON f.leader_id = p.user_id and f.follower_id = $user_id
  INNER JOIN users u ON p.user_id = u.user_id

我现在无法访问计算机,但是您的SQL查询似乎有一些错误。 查看我的更正版本:

SELECT posts.user_id, posts.body, posts.image, posts.has_image FROM posts
INNER JOIN follows ON posts.user_id = follows.follower_id
WHERE follows.leader_id=$user_id;

试试这个查询:

SELECT
    posts.user_id, posts.body, posts.image, posts.has_image
    authors.avatar, authors.username
FROM
    posts
LEFT JOIN
    users as authors
ON
    authors.user_id=posts.user_id
LEFT JOIN
    follows
ON
    follows.leader_id=authors.user_id
WHERE
    follows.follower_id={$user_id}

仅使用左联接...。

假设当前user.user_id为1,关注者为user.user_id 2,3和4

我认为我们需要满足以下条件,对吗?

posts.user_id = follows.follower_id follows.leader_id = $user_id

因此查询将需要像这样的权限吗?

SELECT * FROM posts INNER JOIN follows ON posts.user_id = follows.follower_id INNER JOIN users ON follows.leader_id = $user_id

这是表的模拟示例

=== users === user_id | username | avatar 1 current 2 fake1 3 fake2 4 fake3 === users === user_id | username | avatar 1 current 2 fake1 3 fake2 4 fake3 === posts === post_id | user_id | body | image | has_image 1 2 2 2 3 3 4 3 5 4 6 4 === posts === post_id | user_id | body | image | has_image 1 2 2 2 3 3 4 3 5 4 6 4 === posts === post_id | user_id | body | image | has_image 1 2 2 2 3 3 4 3 5 4 6 4 === follows === leader_id | follower_id 1 2 1 3 1 4 === follows === leader_id | follower_id 1 2 1 3 1 4这有意义吗? 由于当前用户($ user_id)是关注者的领导者,因此,如果您希望关注者的帖子而不是领导者的帖子,则follower_id的用户必须是帖子的用户...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM