如何设置mysql查询和php代码忽略值0并计算其他行

问题描述 投票:-2回答:1

如何设置mysql查询和php代码,我有这个mysql:

CREATE TABLE IF NOT EXISTS `ocene` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `predmeti` varchar(255) NOT NULL,
  `ocena1` varchar(255) NOT NULL,
  `ocena2` varchar(255) NOT NULL,
  `ocena3` varchar(255) NOT NULL,
  `ocena4` varchar(255) NOT NULL,
  `ocena5` varchar(255) NOT NULL,
  `ocena6` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 CHARSET=utf8;

所以它采用以下值为ocena1 - ocena6的范围可以从0到5.例如,如果:

ocena1 = 5
ocena2 = 4
ocena3 = 0
ocena4 = 0
ocena5 = 0
ocena6 = 2 

该函数应该忽略所有那些值为0的行,在这种情况下,11的总和将与3共享。我尝试了一切,但我没有成功。提前致谢。

$con=mysqli_connect("localhost","root","","evidencija_ocena");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

    $sql = "SELECT predmeti,( ocena1 + ocena2 + ocena3 + ocena4 + ocena5 + ocena6) AS prosek FROM ocene group by id";

    if ($result=mysqli_query($con,$sql))
    {
    // Fetch one and one row
    while ($row=mysqli_fetch_row($result))
      {
      printf ("%s (%s) <br />",$row[0],$row[1]);
      }
    // Free result set
    mysqli_free_result($result);
  }


  $sql = "SELECT  SUM(prosek) FROM ocene";   
  if ($result=mysqli_query($con,$sql))
  {
  // Print out result
while ($row = mysqli_fetch_array($result)){
    echo "PROSEK" . $row['SUM(predmeti)'] . "" ;
       echo "<br />";
}
  }

  mysqli_close($con);

和:

$brojOcena = 0
$suma = 0
if($ocena1 > 0) {
    $suma += $ocena1;
    $brojOcena += 1;
}

if($ocena2 > 0) {
    $suma += $ocena2;
    $brojOcena += 1;
}

if($ocena3 > 0) {
    $suma += $ocena3;
    $brojOcena += 1;
}

...

$prosek = $suma / $brojOcena
php mysql php-7
1个回答
0
投票

如果要获取非零列的数量,可以执行以下操作:

SELECT predmeti,
    (ocena1 != '0') + (ocena2 != '0') + (ocena3 != '0') + (ocena4 != '0') + (ocena5 != '0') + (ocena6 != '0') AS prosek_count,
    ocena1 + ocena2 + ocena3 + ocena4 + ocena5 + ocena6 AS prosek
FROM ocene

条件表达式是1,如果它是真的,0如果它是假的,你可以将它们加在一起得到计数。

© www.soinside.com 2019 - 2024. All rights reserved.