Mysql内连接查询给出了三次行

时间:2013-09-26 16:09:38

标签: php mysql pdo inner-join

感谢阅读。

我正在尝试学习内部联接和加入。我的目的是比较,如果用户创建社区也在CommunityMembers表中标记为管理员(我不确定INNER JOIN是否达到此目的)并从社区表中获取与CommunityID相关的所有其他社区信息(这是可能的)我理解的是内连接。)

我有两个名为Community和CommunityMembers的表。

该结构适用于社区(它有其他数据,如日期,内容等......):

CommunityID -    Slug      - CreatedByUser
     1      -    video     -      2
     2      -    funny     -      2
     3      -    picture   -      4

for CommunityMembers

 CmID - UserID  -      Slug         - Power
   1  -   2     -      video        - admin
   2  -   2     -      funny        - admin
   3  -   4     -      picture      - admin

我的PHP代码:($_SESSION['UserID']是2)

<?php

$sql = $dbc->prepare(" SELECT cm.*, com.* 
                       FROM Community com
                       INNER JOIN CommunityMembers cm ON cm.UserID = com.CreatedByUser
                       WHERE cm.UserID = '" . $_SESSION['UserID'] . "'");

$sql->execute();

if($sql->rowCount()){
    echo  $sql->rowCount();
    while($data = $sql->fetch()){
        $output .= $data['Slug'] .'<br />';
    }
    echo $output;
}else{
    $_ERROR = "no record";
}
?>

echo $output;打印

video
video
video
funny
funny
funny

echo $sql->rowcount();打印     6

你能帮忙吗?为什么这次打印相同3次?并且我的解决方案是检查用户是否创建社区在社区成员中被标记为管理员或我是否需要检查它?

感谢。

4 个答案:

答案 0 :(得分:1)

试试这个

$sql = $dbc->prepare(" 
SELECT cm.*, com.* 
FROM Community com
INNER JOIN CommunityMembers cm ON cm.UserID = com.CreatedByUser
WHERE cm.UserID = '" . $_SESSION['UserID'] . "'

GROUP BY com.CreatedByUser
");

答案 1 :(得分:0)

$sql = $dbc->prepare(" SELECT DISTINCT cm.*, com.* 
                   FROM Community com
                   INNER JOIN CommunityMembers cm ON cm.UserID = com.CreatedByUser
                   WHERE cm.UserID = '" . $_SESSION['UserID'] . "'");

SELECT DISTINCT

http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html

答案 2 :(得分:0)

如果你需要知道它的管理员是什么,请不要从CommunityMembers带来所有字段。试试这个

$sql = $dbc->prepare(" SELECT DISTINCT cm.Power, com.*
                       FROM Community com
                       LEFT JOIN CommunityMembers cm ON cm.UseriID=com.CreaterByUser
                       WHERE cm.UserID = '" . $_SESSION['UserID'] . "'");

没有测试过,但即使没有DISTINCT,这也应该有用。

答案 3 :(得分:0)

如果您选择2个表结果SELECT cm.*, com.*,它将返回所有不同的夫妻,所以请尝试仅选择您需要的特定字段。

PS:完整结果是什么,我的意思不仅是slug字段?