2014-07-07 4 views
0

Я этот запрос сделал в codeignitor с использованием активной записиMultiple присоединяется с помощью Codeignitor

$this->db->select('products_main.*, images_main.*, items_main.*, product_tags.*'); 
$this->db->from('products_main'); 
$this->db->join('images_main','products_main.product_tag = images_main.img_tag AND products_main.product_id = images_main.pro_img_id'); 
$this->db->join('items_main','products_main.product_id = items_main.pro_items_id'); 
$this->db->join('product_tags','products_main.product_id = product_tags.pro_tag_id'); 
$this->db->where('products_main.product_id',$p_id); 
$this->db->where('products_main.status','active'); 
$this->db->group_by('products_main.product_id'); 
$query = $this->db->get(); 

Моя цель состоит в том, чтобы:

  • захватить один продукт из products_main, который соответствует вход от $ P_ID

  • Захватите все фотографии для этого продукта из таблицы images_main

  • Захватите все предметы, у которых есть товар продукта, который я нашел

  • Захватите строку в таблице product_tags, которая соответствует product_id продукта, который я нашел.

Я начал тестовую скрипку здесь, но еще не заполнил часть запроса, поскольку я не знаю, что положить. fiddle

+0

Я посмотрел вокруг и не смог найти достаточно данных, чтобы выяснить, как объедините три таблицы в codeignitor. – Amir

+0

Какая ошибка вы получаете? – Burak

+0

Переменная NULL, что по сути означает, что я думаю, что нет массива из созданного мной sql. – Amir

ответ

1

У вас нет каких-либо проблем в рамках вашего запроса, но, как вы группы по product id, вы можете получить только один результат, но вы можете сгруппировать по image_id вместо этого, я создал то же самое в моем локальном хосте с базой данных вы создали скрипку и попробовали свое решение, единственная проблема, которую я вижу, - это то, что вы не присоединяетесь слева, запрос не может найти никаких точных совпадений, поэтому попробуйте присоединиться к левому, также я изменил ваш запрос немного, чтобы предотвратить ошибку базы данных с заданной структурой в вашей скрипке, так изменить его, если вы их как то в вашей базе данных (комментировал их):

$this->db->select('p.*, im.*, i.*, pt.*'); 
$this->db->from('products_main as p');  
// img_tag -> image_tag 
$this->db->join('images_main as im', 
    'p.product_tag = im.image_tag 
    AND p.product_id = im.product_id','left'); // pro_img_id -> product_id 
$this->db->join('items_main as i', 
    'p.product_id = i.product_id','left'); // pro_items_id -> product_id 
$this->db->join('product_tags as pt', 
    'p.product_id = pt.product_id','left'); // pro_tag_id -> product_id 
$this->db->where('p.product_id',"23"); // i have given example id as 23 
$this->db->where('p.status','active'); 
$query = $this->db->get(); 
return $query->result_array(); 
+0

Я попробовал пример, который вы отправили, и он почти сработал. Для изображений он отлично работает, когда я добавил group_by (im_img_id). Однако для элементов он показывает только один элемент несколько раз. Я попытался добавить еще один group_by (i.items_id), но это не сработало. – Amir

+1

да, это будет так, из-за структуры вашего запроса, из-за этого вы можете извлечь параметр «group_by» из вашего запроса и все цикл и извлечь дубликаты, либо вы должны написать другой запрос с разделяющими объединениями между двумя запросами. – Burak

+0

Я понимаю, что вы имеете в виду. Я думаю, что я просто отколол таблицу элементов и завершил это в отдельном запросе, так как остальные три, похоже, преуспеют без него, и нет дубликатов с добавлением group_by. Еще раз спасибо за потрясающую помощь. – Amir

Смежные вопросы