MySql如何计算已经使用SELECT获取的结果?

时间:2013-12-21 17:49:22

标签: php mysql sql

Html表填充了使用SELECT查询从数据库检索的数据:

$query = mysqli_query($con, "SELECT `doc_title`, `date`, `status` FROM `table_name` WHERE `user_id` = 25");

while($row = mysqli_fetch_array($query)) {

    echo '<tr>
            <td>'. $row['doc_title'] .'</td>
            <td>'. $row['date'] .'</td>
            <td>'. $row['status'] .'</td>
         </tr>';
}

有没有办法计算有多少检索到的记录有$ row ['status'] == 1,有多少有$ row ['status'] == 2没有运行单独的SELECT COUNT查询?

2 个答案:

答案 0 :(得分:2)

在内部,你可以计算2个变量:

$status1 = 0;
$status2 = 0;
while($row = mysqli_fetch_array($query)) {

    if($row['status'] == 1) 
        $status1++;
    else if($row['status'] == 2)
        $status2++;

    echo '<tr>
            <td>'. $row['doc_title'] .'</td>
            <td>'. $row['date'] .'</td>
            <td>'. $row['status'] .'</td>
         </tr>';
}

此外,您可以以类似的方式使用switch语句。

答案 1 :(得分:1)

如果user_id被编入索引,则另一个查询非常非常便宜,因此请勿过多地更改您的表示层。

但如果你必须,我会这样做:

$statuses = array();
while ($row = mysqli_fetch_array($query)) {
  @$statuses[ $row['status'] ]++;
}

var_dump($statuses[1], $statuses[2]);

@用于添加到$statuses的尚未存在的第一个状态。您可能希望使用isset()代替。有些人非常反对 - @

$statuses = array();
while ($row = mysqli_fetch_array($query)) {
  isset($statuses[ $row['status'] ]) or $statuses[ $row['status'] ] = 0;
  $statuses[ $row['status'] ]++;
}

但我认为它实际上不太可读。