首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SQL查询放在for()循环中

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

Stack Overflow用户
提问于 2014-03-07 10:50:57
回答 4查看 3.1K关注 0票数 1

首先看一下这段代码:

代码语言:javascript
复制
<?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,我不想显示空行。我只想显示它只有当有一个命中。请帮帮忙。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-07 10:57:13

您真的不希望将SQL放在循环中,而是执行100个查询,而不是一个查询。

这将扼杀您的网站的性能,当您只需使用简单的聚合,如下图所示的最佳性能。

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

这样做:

代码语言:javascript
复制
$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倍的延迟和连接处理。

票数 6
EN

Stack Overflow用户

发布于 2014-03-07 10:54:54

试试这段代码

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2014-03-07 10:59:44

代码语言:javascript
复制
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>"; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22248031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档