您好在下面的代码选择查询执行但输出给出所有记录值的3倍。
例如,我将用户名作为user2传递,它给出了输出45New45New45New46New46New46New47New47New47NewSUCCESSFULLY
但在我的数据库中它只包含3条记录:
id 47 48 49
groupname:New New New
我的输出高于一。但是我得了3次。
我犯了错误。
PHP
case "DispalyGroupDetails":
$userId = authenticateUser($db, $username, $password);
if ($userId != NULL)
{
if (isset($_REQUEST['username']))
{
$username = $_REQUEST['username'];
$sql = "select Id from users where username='$username' limit 1";
if ($result = $db->query($sql))
{
if ($row = $db->fetchObject($result))
{
$sql = "select g.id,g.groupname from `users` u, `friends` f,`group` g
where u.Id=f.providerId and f.providerId=g.providerId";
$theResult = $db->query($sql);
if ($theResult) {
//$theRow = $db->fetchObject($theResult);
while( $theRow = $db->fetchObject($theResult))
{
echo $theRow->id;
echo $theRow->groupname;
}
$out = SUCCESSFUL;
} else {
$out = FAILED;
}
}
else
{
$out = FAILED;
}
}
else
{
$out = FAILED;
}
}
else
{
$out = FAILED;
}
}
else
{
$out = FAILED;
}
break;
答案 0 :(得分:0)
你使用echo $ theRow-> id; ,所以关于这一行的所有结果都是打印的。
答案 1 :(得分:0)
问题在于你的select语句:
SELECT g.id,g.groupname
FROM users u, friends f, group g
WHERE u.Id=f.providerId and f.providerId=g.providerId
您正在加入三个表,用户,朋友和群组。这将产生包含groupname
和group.id
的多行。如果您有可能,请尝试在PHPMyAdmin
或类似工具中执行查询,您会看到查询返回的表包含三行以上,每行包含g.id
和g.groupname
获取groupname和id一次的最简单方法是使用GROUP BY
:
SELECT g.id,g.groupname
FROM users u, friends f, group g
WHERE u.Id=f.providerId and f.providerId=g.providerId
GROUP BY g.id, g.groupname
要详细了解JOINS
的工作原理,请阅读此StackOverflow question。