首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql内连接查询给出三次行

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

Stack Overflow用户
提问于 2013-09-27 00:09:38
回答 4查看 443关注 0票数 2

感谢您的阅读。

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

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

该结构是针对社区的(它有其他数据,如日期、内容等):

代码语言:javascript
复制
CommunityID -    Slug      - CreatedByUser
     1      -    video     -      2
     2      -    funny     -      2
     3      -    picture   -      4

对于CommunityMembers

代码语言:javascript
复制
 CmID - UserID  -      Slug         - Power
   1  -   2     -      video        - admin
   2  -   2     -      funny        - admin
   3  -   4     -      picture      - admin

我的php代码:( $_SESSION['UserID']为2)

代码语言:javascript
复制
<?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;打印

代码语言:javascript
复制
video
video
video
funny
funny
funny

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

你能帮个忙吗?为什么这个打印相同的东西3次?我的解决方案是否正确,以检查用户是否创建了社区,是否在CommunityMembers中标记为管理员,或者我是否需要检查它?

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2013-09-27 01:06:41

尝尝这个

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2013-09-27 00:17:28

代码语言:javascript
复制
$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

票数 0
EN

Stack Overflow用户

发布于 2013-09-27 00:48:03

如果你只需要知道它是否是管理员,不要把所有的字段都从CommunityMembers带来。尝尝这个

代码语言:javascript
复制
$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,它也应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19033295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档