感谢阅读。
我正在尝试学习内部联接和加入。我的目的是比较,如果用户创建社区也在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次?并且我的解决方案是检查用户是否创建社区在社区成员中被标记为管理员或我是否需要检查它?
感谢。
答案 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
字段?