【问题标题】:Get Product Rating count using join in codeigniter使用加入 codeigniter 获取产品评分计数
【发布时间】:2019-09-24 10:28:28
【问题描述】:

我有两张表一张存储产品,另一张存储所有批次的评分和评论, 产品表中有一个名为批号的列。我必须显示按批号排序的表格中的所有产品。并且每批没有应该得到评论的计数。

产品表

id    Product Name    Price    Batch No

评论

id    Batch No    Reviews    Rating

我想输出如下内容:

Product Name       Price   Batch No        
Product 1           200      121
Product 2           300      121
Review Count        2
Product 1           200      125
Product 2           300      125
Review Count        3

我已经写了以下查询,但它不起作用:

$this->db->select('*,COUNT(reviews.id) AS Total')->from('product_table as product')->join('reviews as reviews', 'product.batch_no=reviews.batch_no')->get()->result();

【问题讨论】:

标签: mysql codeigniter codeigniter-3


【解决方案1】:

只需添加Group by 即可使用

        $this->db->select('*, COUNT(r.id) AS Total');
        $this->db->group_by('p.batch_no');
        $this->db->join('reviews r', 'r.batch_no = p.batch_no');
        $data = $this->db->get('product_table p')->result_array();

        print_r($data);

【讨论】:

  • 但是使用 group by 我不能得到每个批号的单独记录。
  • 如果重复则使用另一个查询获取count
  • 重复
  • 所以当你得到产品时不要加入。步骤 1. 获取 product ,并在 PHP 的 for 循环中使用另一个查询根据该批号查找计数。
  • 曾经尝试使用r.bach no 代替p.batch no 进行分组
【解决方案2】:

我建议你阅读这篇文章。 https://codeigniter.com/userguide2/database/results.html

优化 SQL 输入

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0)
{
   foreach ($query->result() as $row)
   {
      echo $row->title;
      echo $row->name;
      echo $row->body;
   }
}

至于 SQL 语法,使用这个:

SELECT p.id    , p.product_name  , p.Price , r.batch_no, r.reviews
FROM product as p
      LEFT JOIN reviews as r  
        ON r.batch_no = p.batch_no
GROUP BY p.id , r.batch_no

过度依赖 ACTIVE RECORDS 并不是一件健康的事情。它对于简单或不太复杂的查询具有优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多