Получить рейтинг продукта с помощью соединения в codeigniter - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть две таблицы. В одной из них хранится информация о товаре, а в другой - рейтинг и обзоры всех партий. В таблице товаров есть столбец с именем № партии.Я должен показать все продукты в таблице, отсортированные по партии №.и каждая партия не должна получать количество отзывов.

Таблица продуктов

id    Product Name    Price    Batch No

Отзывы

id    Batch No    Reviews    Rating

Iхочу вывести что-то вроде этого:

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();

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Просто добавьте 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);
0 голосов
/ 24 сентября 2019

Предлагаю вам прочитать это.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 вредна для здоровьявещь.Он имеет преимущества для простых или менее сложных запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...