如何将SQL查询放入for()循环中

时间:2014-03-07 10:50:57

标签: php html mysql

首先看一下这段代码:

<?php

$dbhost = 'xxxxx';
$dbuser = 'xxxxxx';
$dbpass = 'xxxxxxx';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  //Some code
}

$sql1 = 'SELECT AVG(time) FROM lucky WHERE interviewer=1';
$sql2 = 'SELECT AVG(time) FROM lucky WHERE interviewer=2';
.
.
$sql100 = 'SELECT AVG(time) FROM lucky WHERE interviewer=100';

mysql_select_db('xxxxxx');

$retval1 = mysql_query( $sql1, $conn );
$avg1 = mysql_result($retval1,0);
.
.
$retval100 = mysql_query( $sql100, $conn );
$avg100 = mysql_result($retval100,0);

if (! $retval)
{
  //Some code
}

mysql_close($conn);

?>

<table width='1100' border='0' align='center'>
  <tr>
    <td>1</td>
    <td><?php echo round($avg1, 2); ?></td>
  </tr>
  .
  .
  <tr>
    <td>100</td>
    <td><?php echo round($avg100, 2); ?></td>
  </tr>
</table>

实际发生的事情是如果在db中找到了访问者1,那么它的平均时间将被计算,然后显示在下表中。必须为100名面试官完成。我想要的是使用更简单的方法,比如使用for()循环。另外,我想如果在db中找不到面试官1,我不想显示空白行。我想只在有点击时显示它。 请帮忙。

4 个答案:

答案 0 :(得分:5)

你真的不想把SQL放在一个循环中你将执行100个查询而不是一个查询。

当你可以使用如下图所示的简单聚合以获得最佳性能时,这会破坏你网站的性能。

此外,不推荐使用mysql库,而是使用mysqli。

这样做:

$sql = 'SELECT interviewer, AVG(time) AS avg_time 
        FROM lucky 
        WHERE interviewer BETWEEN 1 AND 100
        GROUP BY interviewer';

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

// Execute the query
$result = $mysqli->query($sql);

// Display the results in a table
echo '<table><tbody>';
while ($row = $result->fetch_assoc()) {
    echo '<tr>';
    echo '<td>' . $row['interviewer'] . '</td>';
    echo '<td>' . round($row['avg_time'], 2) . '</td>';
    echo '</tr>';
}
echo '</tbody></table>';

// Close the resultset
$result->close();

我上面所做的是拉动所有采访者的平均时间,由采访者将他们分组#。

这将自动消除数据库级别的失踪访调员。

然后,我使用while循环遍历数据库结果。

这是从数据库中查询和显示多个项目的公认编程实践。 DB在过滤和聚合数据方面非常快。用它来擅长它。如果你试图将这个逻辑推出到PHP中,并且对数据库进行100次查询,那么你将无延迟地增加100倍的延迟和连接处理。

答案 1 :(得分:0)

试试这段代码

for($i=1; i<=100; $i++)
{
$sql1 = 'SELECT AVG(time) FROM lucky WHERE interviewer='.$i;

}

OR

$sql1 = 'SELECT AVG(time) FROM lucky WHERE interviewer BETWEEN 1 AND 100

答案 2 :(得分:0)

echo "<table width='1100' border='0' align='center'>";
  for($i=1; i<=100; $i++)
  {
   $sql1 = 'SELECT AVG(time) FROM lucky WHERE interviewer='.$i;
    echo "<tr>";

     mysql_select_db('xxxxxx');
     $retval1 = mysql_query( $sql1, $conn );
     $avg1 = mysql_result($retval1,0);
     echo "</tr>";
   }
 echo "</table>"; 

答案 3 :(得分:0)

您可以使用这个简单的查询。

SELECT avg(time) FROM lucky GROUP BY  interviewer

无需循环播放。