Невозможно объединить 3 таблицы в Codeigniter - PullRequest
0 голосов
/ 02 марта 2019

Я получаю продукты из codeigniter, есть три таблицы:

  1. dg_products
  2. dg_rating
  3. dg_like

После присоединения dg_products и dg_rating работает, но я хочу получить аналогичный статус от dg_like.

Структура dg_like:

id | P_id | Uid

Из сеанса я могу получитьтекущий вошедший в систему идентификатор пользователя, но не может получить информацию о том, понравился ли этот пользователь конкретному продукту или нет.Пожалуйста, дайте какие-либо предложения.

public function get_featured()
{
        $this->db->select('dg_products.*, AVG(dg_rating.rating) As averageRating');
        $this->db->from('dg_products');
        $this->db->join('dg_rating', 'dg_products.id = dg_rating.product_id','left');
        $user_info=$this->session->userdata('logged_in');
        $user_id=$user_info['id'];

        if($user_id != '') {
            $this->db->join('dg_like', 'user_id = dg_like.u_id');
        }

        $this->db->where('dg_products.is_featured_prod','1');
        $this->db->group_by("dg_products.id");

        $query = $this->db->get();   

        $result = $query->result();
        return $result; 
}

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Если вы извлекаете текущую зарегистрированную запись пользователя, согласно вашей таблице dg_like структура is id |P_id |Uid.Здесь $ user_id - это идентификатор пользователя для входа.

$this->db->select('dg_products.*, AVG(dg_rating.rating) As averageRating');
$this->db->from('dg_products');
$this->db->join('dg_rating', 'dg_products.id = dg_rating.product_id','left');

if($user_id != '') {
     $this->db->join('dg_like', 'dg_products.id = dg_like.P_id');
}
$this->db->where('dg_like.Uid',$user_id);
$this->db->where('dg_products.is_featured_prod','1');
$this->db->group_by("dg_products.id");
$query = $this->db->get();   
$result = $query->result();

Я надеюсь, что ваша проблема решена.

0 голосов
/ 02 марта 2019

Согласно предоставленной вами информации, вы присоединяетесь, используя несуществующее поле

Если структура dg_like имеет вид

id |P_id |UID

оператор соединения должен быть

 $this->db->join('dg_like', 'user_id = dg_like.Uid');

Я бы пошел еще дальше и рекомендовал бы сделать его LEFT JOIN, чтобы выходные данные запроса содержали все строки независимо от того,быть любимым или нет:

 $this->db->join('dg_like', 'user_id = dg_like.Uid', 'LEFT');

надеюсь, что это работает

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