2013-09-23 2 views
0

У меня есть 4 таблицы MySQL следующим образом ..результата поиска на основе категории и цвете

Продукты (идентификатор, складской учет, имя, color_id, описание, отрывок)

Цвет (COLOR_NAME , color_id)

Категории (categ_name, categ_id)

Product_Categories (pid, cid)

Теперь я хочу выполнить операцию поиска. В настоящее время мой поисковый запрос основан на идентификаторе продукта, sku, описании или color_id.

Мой запрос в CodeIgniter следующим образом ....

$color_id = 0; 
     $this->db->select('color_id'); 
     $this->db->where('LOWER(color_name)',strtolower($term)); 
     $color_row = $this->db->get('product_colors')->row(); 
     if($color_row) 
      $color_id = $color_row->color_id; 

$this->db->select('*, LEAST(IFNULL(NULLIF(saleprice, 0), price), price) as sort_price', false); 
     //this one gets just the ones we need. 
     $this->db->where('enabled', 1); 
     $this->db->where('(name LIKE "%'.$term.'%" OR description LIKE "%'.$term.'%" OR excerpt LIKE "%'.$term.'%" OR sku LIKE "%'.$term.'%" OR color='.$color_id.')'); 

Это работает абсолютно fine.But Я хочу искать на категории основе тоже. Например, я хочу найти, например, «Красные туфли», где красный цвет и обувь - это название категории.

Пожалуйста, расскажите, как построить запрос для этого.

Это будет отличная помощь.

Спасибо !!!

+0

Нет, пожалуйста, сообщите нам, как вы бы построить запрос для этого, и мы поможем, если вы столкнулись с какой-либо проблемы. – markus

+0

@markus спасибо за негатив, но я не знаю, какой запрос нужно здесь написать. Я понятия не имею об этом типе поиска (красные шоу, коричневая куртка и т. Д.) –

+0

Ну, начните выяснять, если ничего не проследить и не исправить. что ты уже испробовал? Как это случилось? Каковы ваши мысли о том, как это можно решить? Вы должны показать, что вы готовы внести свой вклад, а не просто позволить другим выполнять свою работу за вас. – markus

ответ

0
SELECT * FROM PRODUCTS JOIN 
Product_Categories ON PRODUCTS.id = Product_Categories.pid 
JOIN Categories on Categories.categ_id = Product_Categories.cid 
JOIN Colors ON Colors.color_id = Products.color_id 
WHERE categ_name = 'Shoes' AND Colors='Red'; 
+0

danip Спасибо за ваш ответ, но мне также нужно искать по названию продукта, по убыванию, выдержке, sku, имени цвета и т. Д. Мне нужно использовать OR во всем этом ... Пожалуйста, посмотрите мой запрос и добавьте в него свой запрос. Он находится в кодеригнере. Еще раз спасибо. :) –

1

Попробуйте это присоединившись все таблицы

$term=$_POST['your search field name']; 
$keyword=explode(" ",$term); 
$this->db->select('p.*'); 
$this->db->from('Products p'); 
$this->db->join('Product_Categories pc', 'p.id = pc.pid','LEFT'); 
$this->db->join('Categories c', 'pc.cid = c.categ_id','LEFT'); 
$this->db->join('Colors co', 'p.color_id = co.color_id','LEFT'); 
$this->db->where('p.enabled', 1); 

foreach($keyword as $k){ 
$this->db->or_where('p.id =', $k);//or_where 
$this->db->like('p.sku', $k); 
$this->db->like('p.description', $k);//or_like 
$this->db->like('co.color_name', $k); 
$this->db->like('c.categ_name', $k); 

} 

$this->db->group_by("p.id"); 

Active Record Class

0

получить название категории первое как $ categ_name = $ categ_row-categ_name; $ color_name = $ color_row-color_name;

в условиях ставить Colors.color_name как «$ COLOR_NAME» и Categories.categ_name как «$ categ_name»

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