我已经搜索了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;
}
谢谢
答案 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;
此查询对所有行执行一次运行,并产生两个计数:肯定票和总票。