我有3张桌子:
表:标签,tag_relations,产品
例如,我有3个标签(金色,黄色,亮色),这些标签与产品有关。 我需要在codeigniter中使用ActiveRecord过滤我的结果,因此我会检索具有所有这些标记的产品。
tag_id tag
1 black
2 yellow
3 gold
4 bright
5 dark
tag_id product_id
1 57
2 101
3 101
4 101
5 52
product_id product
52 TV
57 Laptop
101 Speakers
答案 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')
输出
| 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);
}
完成了工作