![](/img/trans.png)
[英]Best way to write a concatenating PHP MS SQL Query and put it into a loop
[英]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.