首先看一下这段代码:
<?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>实际发生的情况是,如果面试官1在db中找到,那么它的平均时间将被计算出来,然后显示在下表中。必须有100名面试官参加。我只想使用一个更短的方法来完成这个任务,比如使用for()循环。另外,如果在db中找不到面试官1,我不想显示空行。我只想显示它只有当有一个命中。请帮帮忙。
发布于 2014-03-07 10:57:13
您真的不希望将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结果。
这是用于从数据库中查询和显示多个项的公认编程实践。DB在过滤和聚合数据方面非常快。用它来做它擅长的事。如果您尝试将该逻辑提取到PHP中,并对数据库进行100次查询,则将增加100倍的延迟和连接处理。
发布于 2014-03-07 10:54:54
试试这段代码
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
发布于 2014-03-07 10:59:44
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>"; https://stackoverflow.com/questions/22248031
复制相似问题