Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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';十分之五';帮助性反问题_Php_Sql_Count - Fatal编程技术网

PHP';十分之五';帮助性反问题

PHP';十分之五';帮助性反问题,php,sql,count,Php,Sql,Count,我已经在网上和stackoverflow上搜索了60分钟,但还没有在这里或网上找到一个解决方案/教程来解释如何高效地完成一个50分之45的有用系统 更好的解释:我正在用PHP进行实验,并试图创建一个有用的系统,即“十分之五的人认为本文很有用”,但我正在努力找出最好的方法,我觉得我的方法有点笨重,它们可能更简单 我的桌子: | id | user_id | opinion | type | type_id | ip | date ----------------------------------

我已经在网上和stackoverflow上搜索了60分钟,但还没有在这里或网上找到一个解决方案/教程来解释如何高效地完成一个50分之45的有用系统

更好的解释:我正在用PHP进行实验,并试图创建一个有用的系统,即“十分之五的人认为本文很有用”,但我正在努力找出最好的方法,我觉得我的方法有点笨重,它们可能更简单

我的桌子:

| id | user_id | opinion | type | type_id | ip | date
---------------------------------------------
  1     2            1        1      1       ::1  dd/mm/yy
我的方式: 我的方法是计算此类型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;
}

谢谢

只要我的两分钱,因为我看不到其他答案。在纯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;

此查询对所有行执行一次运行,并生成两个计数:正投票数和总投票数。

您当前的代码是什么?@D-Shih我在顶部添加了我的计数代码,目前我正在使用该代码来获得所需的结果,我只是想知道是否有更好的方法(更有效)Thanks我认为最好在要投票的元素上创建一个字段,并创建一个允许用户投票1次的字段。那就要看你到底要做什么了。这样,您就不需要计数,只需要从db@Squalo谢谢我试图实现的是一个Zendesk风格的计数器,用户可以说他们是否觉得它有用,只是想找到最好的方法,因为我在网上找不到任何东西!用户只能投票一次,因为它记录了他们的用户_pin@AchmedZuzali据我所知,您只需要向要投票的元素添加一个字段。之后,您允许用户将+1添加到该字段,并禁止后续VOTEST操作,非常感谢您!