【问题标题】:search result on the basis of category and colors基于类别和颜色的搜索结果
【发布时间】:2013-09-28 06:25:30
【问题描述】:

我有4个mysql表如下..

产品(id、sku、名称、color_id、描述、摘录)

颜色(color_name,color_id)

类别(categ_name,categ_id)

Product_Categories (pid,cid)

现在我要执行搜索操作。目前我的搜索查询是基于产品 id、sku、description 或 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.')');

这工作得很好。但我也想按类别搜索。例如,我想搜索 “Red Shoes”,其中红色是颜色,鞋子是类别名称。

请告诉我如何为此构建查询。

这将是一个很大的帮助。

谢谢!!!

【问题讨论】:

  • 不,请告诉我们您将如何为此构建查询,如果您遇到任何问题,我们会提供帮助。
  • @markus 谢谢你的否定,但我不知道这里需要写什么查询。我不知道这种类型的搜索(红色显示,棕色夹克等)
  • 好吧,开始寻找吧,如果没有别的,请通过反复试验。你都尝试了些什么?它是如何失败的?你对如何解决这个问题有什么想法?你需要表明你愿意做出贡献,而不是让别人为你做你的工作。
  • @markus 我能做什么我已经做了我正在搜索除类别之外的所有基础。只剩下这个了。
  • 通常产品的颜色名称不会改变 - 因此请考虑将其作为产品表的一部分。创建产品时,您仍然可以使用单独的表格来选择颜色名称。

标签: php mysql codeigniter search


【解决方案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

【讨论】:

    【解决方案2】:
    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';
    

    【讨论】:

    • danip 感谢您的回答,但我还需要搜索产品名称、描述、摘录、sku、颜色名称等。我需要在所有这些中使用 OR... 请查看我的查询和在其中添加您的查询。它在codeigniter中。再次感谢。 :)
    【解决方案3】:

    先获取类别名称like $categ_name = $categ_row-categ_name; $color_name = $color_row-color_name;

    在条件下放置 Colors.color_name like '$color_name' 和 Categories.categ_name like '$categ_name'

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多