Get Join只识别已注册的组



我正在尝试选择用户已注册的组,这些组在成员表中指定并在用户所属的所有组的一个页面上显示更新,但每次都会不断显示已创建的每个组的更新,即使这些组不是成员。那么,我如何才能确保只有用户加入这些更新的组才会显示呢?

到目前为止,我的问题是:

    $select_posts_from_groups_query = $db->query("SELECT spud_groups_posts.post_body,spud_groups_posts.group_url,spud_groups_members.member_name
         FROM spud_groups_posts LEFT JOIN spud_groups_members ON spud_groups_posts.post_body = spud_groups_members.member_name");

        while($select_posts_from_groups_array = $db->fetch_array($select_posts_from_groups_query)) {
            $group_url_id = $select_posts_from_groups_array['group_url'];
            $post_body = $select_posts_from_groups_array['post_body'];
            $select_group_data_from_posts_query = $db->query("SELECT * FROM spud_groups WHERE gid='$group_url_id'");
            $select_group_data_from_posts_array = $db->fetch_array($select_group_data_from_posts_query);
            $group_name_data = $select_group_data_from_posts_array['group_name'];

                #$group_name_data = false;
            echo "<div class='mx'> 
        <p> <h2> $group_name_data </h2></p>
        $post_body</div>
<br>
        ";
    }

以前从未进行过SQL连接,所以这就是原因。

首先,一个好的做法是使用别名,这样您的代码看起来会更好

SELECT 
    gr.post_body,
    gr.group_url,
    mem.member_name
FROM 
    spud_groups_posts gr
    LEFT JOIN spud_groups_members mem ON 
        gr.post_body = mem.member_name

此查询将提供表spud_groups_posts中的所有结果和spud_groups_members中的匹配结果。

您应该将LEFT JOIN替换为JOIN或INNER JOIN(结果相同)。


正如您在注释中提到的,ResultSet是空的,这意味着表spud_groups_posts中的列post_body和表member_name中没有匹配的值spud_groups_members

在您的选择中,您使用的是LEFT JOIN。因此,选择所有组。

您必须使用INNER JOIN。

最新更新