Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP计算在许多列中包含相同值的MYSQL行_Php_Mysql - Fatal编程技术网

PHP计算在许多列中包含相同值的MYSQL行

PHP计算在许多列中包含相同值的MYSQL行,php,mysql,Php,Mysql,以下是我表格的内容: 如何计算不同表单元格中的所有名称以得到这样的结果 鲍勃-7 亚历克斯-3 伊万-5 尼娜-5 使用此代码: <?php $q= mysqli_query($db, 'SELECT * FROM names'); while ($all = mysqli_fetch_array($q)) { $k1= $all['Name1']; $k2= $all['Name2']; $k3= $all['Name3']

以下是我表格的内容:

如何计算不同表单元格中的所有名称以得到这样的结果

  • 鲍勃-7
  • 亚历克斯-3
  • 伊万-5
  • 尼娜-5
使用此代码:

<?php
$q= mysqli_query($db, 'SELECT * FROM names');
    while ($all = mysqli_fetch_array($q)) {
        $k1= $all['Name1'];
        $k2= $all['Name2'];
        $k3= $all['Name3'];
        $k4= $all['Name4'];
        $k5= $all['Name5'];
        $k6= $all['Name6'];
        $arr[]= $k1;
        $total_values = array_count_values($arr);
    }
    foreach ($total_values as $key => $value) {
        echo $key .'-'. $value .'<br>';
    }

这将计算单个名称的出现次数:

$q= mysqli_query($db, 'SELECT * FROM names');
$arr = array();

// 1) loop through rows
while ($all = mysqli_fetch_array($q, MYSQLI_NUM)) {
 // 2) loop through cells in a row
 foreach($all as $val) {
  // 3) 'roll out' the values into a one-dimensional array
  if(empty($val)) { continue; } // if you don't want to count empty cells
  $arr[] = $val;
 }    
}
// 4) count the number of occurences
$names_qty = array_count_values($arr);

// optional loop that shows the results
foreach($names_qty as $name=>$qty) {
 echo $name.'-'.$qty.'<br />';
}
$q=mysqli_查询($db,'SELECT*FROM names');
$arr=array();
//1)循环行
而($all=mysqli\u fetch\u数组($q,mysqli\u NUM)){
//2)循环一行中的单元格
foreach($val){
//3)“展开”值到一维数组中
if(empty($val)){continue;}//如果不想计数空单元格
$arr[]=$val;
}    
}
//4)统计发生的次数
$names\u qty=数组\u计数\u值($arr);
//显示结果的可选循环
foreach($name\u数量为$name=>$qty){
回显$name.'-'.$qty.
; }

此解决方案的好处是,您只需调用一次计数函数,而不是在每次迭代中调用。

您必须在循环中累积数据,并在处理完所有数据后将其打印出来

$total = array();
$result = mysqli_query($db, 'SELECT * FROM names', MYSQLI_USE_RESULT);
while (mysqli_fetch_assoc($result) as $row) {
    foreach ($row as $col => $value)
        total[$col]++;
    }
}

print_r($total);

这段代码已经过测试,应该可以做到这一点

<?php
$arr = array();
$q = mysqli_query($db, 'SELECT * FROM names');
while ($all = mysqli_fetch_assoc($q)) {
    foreach($all as $val) {
        if(empty($val)) {
            continue;
        }
        // saves all names with the name as key
        $arr[$val][] = $val;
    } 
}

// Output
foreach($arr as $k => $v) {
    // count how many times the name was pushed into the array
    echo $k.' - '. count($v);
} 

听起来像是一个很好的使用案例。如果你在查询中做了繁重的工作,你就不必用PHP做很多操作了。为什么OP要“尝试这个”?尤其是当你承认这是未经测试!一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。问题在哪里?是的,它是经过测试的。它是可行的,但是代码将名称的数量增加了一倍(在名称之后)!为了防止名称的双重编号,我将mysqli_fetch_数组更改为mysqli_fetch_assoc,代码运行得非常完美!我更新了你的帖子!我已经更新了我的答案。如果你投票支持这个答案,那就太好了为什么OP要“试试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。代码会使名字的数字(名字之后)翻一番@BorislavRazvanski感谢您发现这一点!这是因为
mysqli\u fetch\u array
同时返回了数字键和字符串键,因此每行中的单元格数量增加了一倍。在向该函数添加第二个参数后,一切正常。是的,现在可以工作了!但是,在您在函数中添加第二个参数之前,我使用mysqli\u fetch\u assoc而不是mysqli\u fetch\u数组,它可以正常工作!多谢各位@BorislavRazvanski太好了,不客气。这两种功能都可以使用。如果我的回答对你有帮助,请考虑接受。谢谢:)。
<?php
$arr = array();
$q = mysqli_query($db, 'SELECT * FROM names');
while ($all = mysqli_fetch_assoc($q)) {
    foreach($all as $val) {
        if(empty($val)) {
            continue;
        }
        // saves all names with the name as key
        $arr[$val][] = $val;
    } 
}

// Output
foreach($arr as $k => $v) {
    // count how many times the name was pushed into the array
    echo $k.' - '. count($v);
}