Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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 SQL,如何不计算0值_Php_Mysql - Fatal编程技术网

Php SQL,如何不计算0值

Php SQL,如何不计算0值,php,mysql,Php,Mysql,我试图找到一个总投票使用此代码,我有12个标准; 因此,我将每个店铺标识的总数相加,然后除以12(用于生成总数的列数)。COUNT(shop_id)查找店铺的数量,例如,如果我有两个shop_id输入,一个输入的总数为0(12个条目为0),另一个输入的总数为60,除以12个标准,然后除以shop_id COUNT 2 (60/12)/2 = 2.5 我希望结果是5。在除法中不使用0来计算列的一些方法 $sel = mysql_query("SELECT SUM(comfort + service

我试图找到一个总投票使用此代码,我有12个标准; 因此,我将每个店铺标识的总数相加,然后除以12(用于生成总数的列数)。COUNT(shop_id)查找店铺的数量,例如,如果我有两个shop_id输入,一个输入的总数为0(12个条目为0),另一个输入的总数为60,除以12个标准,然后除以shop_id COUNT 2 (60/12)/2 = 2.5 我希望结果是5。在除法中不使用0来计算列的一些方法

$sel = mysql_query("SELECT SUM(comfort + service + ambience + mood + spacious + 

    experience + cleanliness+ price + drinks + food + music + toilets)/(12/COUNT(shop_id) as total                  
    FROM ratings         
    WHERE shop_id = $shop_id");                 

if(mysql_num_rows($sel) > 0){
    while($data = mysql_fetch_assoc($sel)){
        $total = $total + $data['total']; 
        $rows++;
    }
    $perc = ($total/$rows);
    return round($perc,2);
} else {
    return '0';
}
如果我提供一个图像,以便直观地显示我试图实现的目标,会更好吗

每行不是1票,每个店铺id是12票。 每个列类别名称:comfort+service+ambience,是一个列id,进入该字段的条目为1票,它将12票计算为1票,如果您为1个标准投票,则其他11票为0,并返回错误的结果,因为除以2将是正确答案的一半

为了便于测试,我上传了一个可视示例,并将评级列从12缩短为7。
尝试使用HAVING子句:

select
...
from
...
where
...
having COUNT(shop_id) > 0
我很确定你的查询不太正确,但那可能是个打字错误

下面可能是一个更好的查询:

SELECT shop_id, SUM(comfort + service + ambience + mood + spacious + 
experience + cleanliness+ price + drinks + food + music + toilets)/12 as total_rating                 
FROM ratings         
GROUP BY shop_id
HAVING total > 0
就我个人而言,我认为如果有人获得了全面的0分,这是值得注意的,但上面应该给你每个商店的平均评分,并过滤掉任何不是至少1的

如果每个类别都是0-5分制,共有12个类别,这意味着他们的百分比分数是(个人分数之和)/(可能总数)*100,或者,在这种情况下,是个人分数之和/.6(计算方法相同)。如果你想要一个“星级评定”,其中星级的数量等于每个类别的最高分数,那只是平均值。那样的话,我就四舍五入到小数点后一位。因此,如果你想走这条路,我将使用以下查询:

   SELECT shop_id, 
          Ceiling(
                 Sum(comfort + service + ambience + mood + spacious + 
                      experience + cleanliness + price + 
                      drinks + food + music + toilets
           ) /. 6) 
          AS  percent_rating, 
          ROUND(
            SUM(
              comfort + service + ambience + mood + 
              spacious + experience + cleanliness + 
              price + drinks + food + music + toilets
            )/12, 1)
          as star_rating
   FROM   ratings 
   GROUP  BY shop_id 
现在,如果你想把它放在每个分数都超过100%的地方,那么它应该是(cat_分数/5)*100或(cat_分数/0.05)。我不确定是否有一种简单的方法可以应用于所有类别,而不必对每个字段进行明确的计算,但我真的认为你不必费心去计算4/5是80%


至于如何处理默认的0和有意的0,您无法知道它们之间的区别。如果有人没有足够的感动来改变0(或空白),那么它一定没有那么棒。最好的办法是将默认值设置为中间值(3),大多数人会将其标记得更低,如果它实际上非常糟糕,以至于是0。类似地,如果你给它留空的选项(不是0,它是空的),那么你可以将它移动到3(这是相同的。如果他们都留空,这与说“我没有填写它很平均”相同),或者你可以将它设置为你认为公平的数字(可能是1或2).扔掉它是一件痛苦的事,而且在统计数据中会导致误导性的数据(想想挂起来的查德加上语言障碍,所以他们把它留为空白)。最后,将空白移到中间是可以的,因为你应该有足够的数据来获得标准差和其他更有价值的统计数据,而不是依赖于简单的平均值(其中一些糟糕的评论可能会破坏整个曲线)。

在你的查询末尾添加:

HAVING comfort + service + ambience + mood + spacious + experience + cleanliness+ price + drinks + food + music + toilets != 0

您的查询不太正确。缺少括号

正确的一点:

$sel = mysql_query("SELECT SUM(comfort + service + ambience + mood + spacious +  
experience + cleanliness+ price + drinks + food + music +toilets)/(12/COUNT(shop_id)) 
as total FROM ratings WHERE shop_id = $shop_id having COUNT(shop_id) > 0");

使用
COUNT(*)怎么样?
。谢谢,但没有成功。我想我从这里开始做了一些其他错误。谢谢,但没有成功:mysql\u num\u rows():提供的参数不是有效的mysql结果资源如果查询失败并返回false,请使用
mysql\u error()
查看出了什么问题。
/(12/COUNT(shop\u id)
你既不需要第一个括号标记,也不需要结尾处缺少的标记。肯定是结尾,我打算用总数/12除以2=2.5,但我开始意识到,我尝试这样做的方式有其他问题。如果你尝试按商店平均数做,那么你就不应该按客户平均数进行分割t、 我不认为。@Renai-试试我的修改,看看是否符合要求。嗨,再次尝试,但没有成功:(现在让我有点发疯。我正在制作一张图片来更好地解释汉克斯,但从外观上看,我比我的质疑错得多
$sel = mysql_query("SELECT SUM(comfort + service + ambience + mood + spacious +  
experience + cleanliness+ price + drinks + food + music +toilets)/(12/COUNT(shop_id)) 
as total FROM ratings WHERE shop_id = $shop_id having COUNT(shop_id) > 0");