select query在php中未正确执行


select query not executing correctly in php

Hi在下面的代码中选择正在执行的查询,但输出给出了所有记录值的3倍。例如,我将username作为user2传递,它给出输出45New45New45New46New46New46New47New47New47NewSUCCESSFULLY但在我的数据库中,它只包含3条记录:

id       47  48 49
groupname:New New New

我预计产量将超过1。但我得到了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;

问题出在您的select语句上:

SELECT g.id,g.groupname 
FROM users u, friends f, group g 
WHERE u.Id=f.providerId and f.providerId=g.providerId

您正在加入三个表:用户、朋友和组。这将产生包含groupnamegroup.id的若干行。如果有可能,请尝试在PHPMyAdmin或类似工具中执行查询,您会发现查询返回的表包含三行以上,每行都有g.idg.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问题。

您使用echo$theRow->id,所以这一行的所有结果都打印出来了。