Codeigniter标签过滤器

时间:2014-01-23 06:04:35

标签: php mysql codeigniter activerecord

我有3张桌子:

表:标签,tag_relations,产品

  • 标记:tag_id,tag
  • tag_relations :tag_id,product_id
  • 产品:product_id,product

例如,我有3个标签(金色,黄色,亮色),这些标签与产品有关。 我需要在codeigniter中使用ActiveRecord过滤我的结果,因此我会检索具有所有这些标记的产品。

标记

 tag_id   tag

  1      black
  2      yellow
  3      gold
  4      bright
  5      dark

tag_relations

 tag_id  product_id

  1      57
  2      101
  3      101
  4      101
  5      52

的产品

 product_id  product

  52         TV
  57         Laptop
  101        Speakers

3 个答案:

答案 0 :(得分:0)

像这样的东西

$this->db->select('t.tag_id,t.tag,p.product');
$this->db->from('tags t');
$this->db->join('tag_relations tr','tr.tag_id = t.tag_id','left');
$this->db->join('products p','p.product_id = tr.product_id','left');

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

不确定,因为没有运行此查询: - )

答案 1 :(得分:0)

您可以使用此查询

SELECT DISTINCT
  p.product
FROM products p
  LEFT JOIN tag_relations tr
    On tr.product_id = p.product_id
  LEFT JOIN tags t
    ON t.tag_id = tr.tag_id
WHERE t.tag IN('gold', 'yellow', 'bright')

SQL Fiddle Demo

输出

|  PRODUCT |
|----------|
| Speakers |

这是活跃的记录

$where  =   array('gold', 'yellow', 'bright');

$this->db
    ->distince()
    ->select('p.product')
    ->from('products p')
    ->join('tag_relations tr','tr.product_id = p.product_id','left')
    ->join('tags t','t.tag_id = tr.tag_id','left')
    ->where_in('t.tag',$where)
    ->get()
    ->result();

答案 2 :(得分:0)

$i = 0;
foreach($filters as $filter)
{
    $i++;
    $this->db->join('tag_relations tr'.$i, 'tr'.$i.'.product_id = products.product_id');
    $this->db->where('tr'.$i.'.tag_id', $filter);
}

完成了工作