PHP '10之5'帮助性问题

时间:2018-09-09 22:03:26

标签: php sql count

我已经搜索了60分钟的网络和stackoverflow,但是还没有在这里找到解决方案/教程,也没有在网络上解释如何有效地从50个有用的系统中选出45个!

更好的解释:我正在尝试PHP,并试图创建一个有用的系统,即“十分之五的人认为本文很有帮助”,但我一直在努力寻找实现此问题的最佳方法,我认为我的方法是有点笨重,可能是更简单的方法!

我的桌子:

| id | user_id | opinion | type | type_id | ip | date
---------------------------------------------
  1     2            1        1      1       ::1  dd/mm/yy

我的方式: 我的方法是计算此type_id的所有数据,以得出“总数”,然后获取数量,查找“ 1”(是)并计算所有这些数!我只是想知道是否有一种更快的方法,而不是我要做两个计数函数。 (有关优化)

我想要获得结果的当前计数代码是这样:

public function getTotalHelpfulness($id)
{
    $bind = [':id' => $id];
    $results = $this->db->select('helpful','type = 1 AND type_id = :id', $bind);
    $totalRows = count($results);
    if($results === FALSE){ $totalRows = '0'; }
    return $totalRows;
}
public function getYesHelpfulness($id)
{
    $bind = [':id' => $id];
    $results = $this->db->select('helpful',
      'opinion = 1 AND type = 1 AND type_id = :id', $bind);
    $totalRows = count($results);
    if($results === FALSE){ $totalRows = '0'; }
    return $totalRows;
}

谢谢

1 个答案:

答案 0 :(得分:1)

我只有两美分,因为我没有其他答案。在普通的SQL中,我会这样做:

select
    sum(case when opinion = 1 then 1 else 0 end) as positive_votes,
    count(*) as total
  from my_table
  where type = 1 and type_id = :id;

此查询对所有行执行一次运行,并产生两个计数:肯定票和总票。