繁体   English   中英

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

[英]How to put SQL query in a for() loop

首先看这段代码:

<?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()循环)来执行此操作。 另外,我希望如果在数据库中未找到访问员1,则我不想显示空白行。 我只想在有点击时显示它。 请帮忙。

您真的不想将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循环遍历数据库结果。

这是用于从数据库中查询和显示多个项目的公认编程实践。 数据库过滤和聚合数据的速度非常快。 善用它。 如果您尝试将这种逻辑引入PHP中,并查询数据库100次,那么您将没有任何延迟地增加100倍的延迟和连接处理。

试试这个代码

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

}

要么

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

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>"; 

您可以使用此简单查询。

SELECT avg(time) FROM lucky GROUP BY  interviewer

无需循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM