Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否让Join仅识别已注册的组?_Php_Mysql_Sql_Database_Join - Fatal编程技术网

Php 是否让Join仅识别已注册的组?

Php 是否让Join仅识别已注册的组?,php,mysql,sql,database,join,Php,Mysql,Sql,Database,Join,我正在尝试选择用户已注册的组,这些组在members表中指定 并在用户所属的所有组的一个页面上显示更新,但每次都会显示已创建的每个组的更新,即使这些组不是成员。那么,我如何才能使它只显示用户加入到这些更新中的组呢 以下是我目前的疑问: $select_posts_from_groups_query = $db->query("SELECT spud_groups_posts.post_body,spud_groups_posts.group_url,spud_groups_memb

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

以下是我目前的疑问:

    $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\u groups\u posts的所有结果以及来自spud\u groups\u成员的匹配结果

您应该用相同结果的联接或内部联接替换左联接

正如您在注释中提到的,您的结果集为空-这意味着您在表spud\u groups\u posts的post\u body列中没有匹配值,而member\u name来自
spud团队成员

欢迎加入SO。如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL和/或SQLFIDLE,以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供一个与步骤1中提供的信息相对应的所需结果集。我扩展了PHP,以便您可以获得更多的想法,希望这有所帮助;我只能再次向您推荐以前的评论。好的,我尝试这是我第一次使用这些连接语句,所以我完全不知道这些语句,所以如果我听起来很愚蠢,我向您道歉。用Inner替换join会给我一个空白页,所以它不会循环。没有连接,有没有其他方法可以执行此方法使用成员名称发布正文。必须在具有相同内容的字段之间设置联接。用户所属的组存储在哪个字段/表中?我现在使用nobodynoone在下面写的查询。我现在要做的就是尝试使其与登录用户所属的组相等。感谢加载到目前为止:我现在需要解决的唯一问题是只循环用户加入到的组的更新基本上,如果在members table中为某个group_url分配了一个表格,请您通过编辑您的问题向我们展示您的表格,并让我们更清楚地了解您想要做什么,因为我在你的代码中没有看到更新语句。当我说更新时,我指的是数据库中的帖子/记录,但我称它们为更新,我应该更好地解释;如果您仍然需要这些表,请告诉我是的,请给我们您的带有列和引用的表,并重新表述您现在面临的问题。谢谢我写了一个有效的查询:D感谢您为我指明了正确的方向