【问题标题】:Change SQL AVG and COUNT if a condition is met如果满足条件,则更改 SQL AVG 和 COUNT
【发布时间】:2018-04-04 23:10:22
【问题描述】:

我正在尝试编写评论网站。我已经解决了大多数事情,直到我意识到我错过了一件事。根据页面平均值计算被列为禁止的评论。

这是处理评论计数和获取平均值的当前 SQL。

$qa = $db->prepare("SELECT ( AVG(review_service_rating) + AVG(review_price_rating) ) AS average_rating, COUNT(review_service_rating) AS num_service_rating, COUNT(review_price_rating) AS num_price_rating FROM reviews WHERE assigned_id = :review_id ORDER BY review_posted DESC");
$qa->execute(array(':review_id' => $_GET['page_id']));
$ra = $qa->fetch(PDO::FETCH_ASSOC);

现在。我添加了一个名为 review_banned 的数据库行,它是 simple 0 = no or 1 = yes

如何将它添加到我现有的 SQL 查询中,以防止它计算被列为禁止的评论。

【问题讨论】:

  • 您想将它们从平均值和计数中排除,还是仅从平均值中排除?
  • @Barmar 我只想将它们从平均值中排除,因为总体平均百分比是用户将要查看的内容。我的系统不使用某人的评论数量,它完全基于那里的分数。
  • @LawrenceCherone 这也会将他们排除在计数之外。

标签: php sql count average


【解决方案1】:

review_banned = 1 时,将评级替换为0

SELECT AVG(IF(review_banned=1, 0, review_service_rating)) + AVG(IF(review_banned=1, 0, review_price_rating)) AS average_rating, ...

【讨论】:

  • 很棒的代码工作。然而,我确实遇到了一个小问题。由于评论没有被计算在内,页面平均值实际上正在增长。我将如何处理实际上计入页面平均值并因此将其降低的被禁止评论?
  • 我不确定我是否理解问题所在。它应该只是非禁止评论的平均值,那么它们如何使平均值增长?你能用演示问题的示例数据制作一个 sqlfiddle 吗?
  • 我想我明白你在说什么。你从1, 2, 3, 4, 5开始,平均是3。然后你禁止1,所以平均值变为3.5。在这种情况下,您希望新的平均值是多少?
  • 因此,当我将 0(review_banned 的默认值)替换为 1 时,该特定页面的平均百分比会上升。技术上禁止的评论应该将默认评级覆盖为 0/10
  • 被禁止的评级被视为一开始就从未提交过。所以就像收视率是2, 3, 4, 5,平均是3.5。但是如果你禁止了给它评分的评论者5,那么评分就会变成1, 2, 3, 4,并且评分会下降到2.5
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多