2

谢谢阅读。

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

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

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

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

社区成员

 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次?我的解决方案是否有权检查用户是否创建社区在 CommunityMembers 中标记为管理员,还是我需要检查它?

谢谢。

4

4 回答 4

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
");
于 2013-09-26T17:06:41.440 回答
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,这也应该可以工作。

于 2013-09-26T16:48:02.970 回答
0

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

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

于 2013-09-26T17:22:14.037 回答
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'] . "'");

选择不同的

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

于 2013-09-26T16:17:27.670 回答