【问题标题】:PHP 'Count' displaying multiple '1's and not a total valuePHP“计数”显示多个“1”而不是总值
【发布时间】:2019-03-06 11:57:32
【问题描述】:

我在 PHP 中从 SQL 数据库调用数据,并且我希望能够计算从数据库中提取的特定值的数量,我可以提取特定值并得到 20 个值,当我尝试时要获取这些值的“计数”,它将显示 20 个“1”,因此“11111111111111111111”而不是“20”。

我已经尝试打印它,并将它输入到一个表格中,但都没有产生我想要的结果。

我的代码如下:

date_default_timezone_set('Europe/London');
$conn = new mysqli("xxx.xxx.xxx","title","password","title");
if (!$con){
    {exit("Connection Failed: " . $con);}
    //Connecting to the (DB) Database
}


<?php
if (isset($_POST['submit'])){
?>
<table>
<tr><td><strong>Count</strong></td></tr>
<?php
$start=$_POST['start'];
$end=$_POST['end'];

$sql="SELECT Data.Items ".
//Selecting the required data from the table
$sql="FROM Data ";
//Selecting FROM the Table(s) required


$reports = $con->query($sql);

while ($report = $reports->fetch_object()){
    $result = count ($report->Items);

    echo count ($result);

    echo "<tr><td>".$report->Items."</td></tr>";
}

?>

【问题讨论】:

  • 获取所有,然后计数,或者只是在循环之外执行 num 行。在循环中,您正在计算始终为一的单行。 编辑:Items 中有什么内容?

标签: php sql database count


【解决方案1】:

这是因为您在获取每一行时在循环中使用了 count 函数。每行有 1 个项目(甚至不是一个数组)。你必须使用

echo $reports->num_rows; 

改为在 while 循环之前。

【讨论】:

    【解决方案2】:

    您需要获取一个包含值的数组并计算每个值在数据库中存在的时间:

    您可以使用array_count_values() 来做到这一点

    $items = [];
    while ($report = $reports->fetch_object()){
     $items[] = $report->Items;
    }
    
    if (! empty($items)) {
     $numOccurances = array_count_values($items);
     foreach ($numOccurances as $val => $count) {
       echo "<tr><td>" . $count . " times </td><td> => ".$val."</td></tr>";
     }
    }
    

    样本输出:

    4 times     => item 1
    2 times     => item 2
    1 times     => item 3
    1 times     => item 5
    2 times     => item 6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      相关资源
      最近更新 更多