选择查询在php中没有正确执行

时间:2015-02-12 09:45:05

标签: php mysql

您好在下面的代码选择查询执行但输出给出所有记录值的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;

2 个答案:

答案 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

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