感谢您的阅读。
我正在尝试学习内部连接和连接。我的目的是比较一下,如果用户创建了社区,那么社区在CommunityMembers表中也被标记为管理员(我不确定内部连接是否实现了这一点),并从与CommunityID相关的社区表中获取所有其他社区信息(据我所知,使用内部连接是可能的)。
我有两个表,名为Community和CommunityMembers。
该结构是针对社区的(它有其他数据,如日期、内容等):
CommunityID - Slug - CreatedByUser
1 - video - 2
2 - funny - 2
3 - picture - 4对于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次?我的解决方案是否正确,以检查用户是否创建了社区,是否在CommunityMembers中标记为管理员,或者我是否需要检查它?
谢谢。
发布于 2013-09-27 01:06:41
尝尝这个
$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-27 00:17:28
$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-27 00:48:03
如果你只需要知道它是否是管理员,不要把所有的字段都从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,它也应该可以工作。
https://stackoverflow.com/questions/19033295
复制相似问题