MySQL Query返回的结果太多了

时间:2011-12-04 18:50:36

标签: php mysql sql

$query = "select DISTINCT user_info.`uid`, company_info.`uid`, user_info.`fname`, user_info.`lname`, user_info.`profile_pic`, company_info.`name` FROM user_info, company_info  where fname like '%$q%' or lname like '%$q%' AND company_info.`uid` = user_info.`uid` LIMIT 5";

while($row = mysql_fetch_assoc(mysql_query($query))){
   outputUserImage($row["profile_pic"]);
   outputUserFname($row["fname"], $row["uid"]);
   outputUserLname($row["lname"]);
   outputUserCompany($row["name"]);
}

此查询有效,但是返回的结果太多(重复)并且执行速度很慢。有人能告诉我这似乎是什么问题吗?

3 个答案:

答案 0 :(得分:7)

我看到了问题。你在循环中调用mysql_query(),一遍又一遍!

// Don't do this!
while($row = mysql_fetch_assoc(mysql_query($query))){
//-----------------------------^^^^^^^^^^^^^^^^^

相反,首先在循环外执行查询:

// Do the query first
$result = mysql_query($query);
// Check that it succeeded
if ($result) {
    // Then fetch rows
    while($row = mysql_fetch_assoc($result)){
      // Rest of loop...
    }
}
// problem with query...
else {
  echo mysql_error();
}

您可能正在运行PHP的最大执行时间,因为您的查询一遍又一遍地返回,否则将是无限循环。始终在循环外调用mysql_query(),并在获取结果之前验证它是否已成功完成。

答案 1 :(得分:0)

这是因为你的SQL查询。你正在做一个笛卡尔连接,它只是返回每个表乘以其他行数....

select DISTINCT user_info.`uid`, company_info.`uid`, user_info.`fname`, user_info.`lname`, user_info.`profile_pic`, company_info.`name` 
  FROM user_info, company_info 
 where fname like '%$q%' 
       or lname like '%$q%' 
   AND company_info.`uid` = user_info.`uid` 
 LIMIT 5

你想要这个,这可能会帮助你摆脱不同的。注意or语句周围的括号。

select DISTINCT user_info.`uid`, company_info.`uid`, user_info.`fname`, user_info.`lname`, user_info.`profile_pic`, company_info.`name` 
  FROM user_info, company_info 
 where company_info.`uid` = user_info.`uid` 
   and ( fname like '%$q%' 
         or lname like '%$q%' )
 LIMIT 5

答案 2 :(得分:-1)

我认为这与WHERE子句中的操作顺序有关。 AND先于OR。尝试将OR'd语句包装在括号中,如下所示:

where (fname like '%$q%' or lname like '%$q%') AND company_info.`uid` = user_info.`uid` LIMIT 5";