簡體   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