首先看一下这段代码:
<?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,我不想显示空白行。我想只在有点击时显示它。 请帮忙。
答案 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
无需循环播放。