我在mysql中有3个表:
牌:
id | name
1 | alpha
2 | beta
标签:
id | name
1 | a
2 | b
标签链接:
id | card | id
1 | 1 | 1
2 | 2 | 1
3 | 2 | 2
我想检索所有不包含特定标签的卡片。CI型号:
function search($_tag) {
$this->db->select('card.id');
$this->db->join('tag_link', 'card.id = tag_link.card');
$this->db->where_not_in('tag_link.tag', $_tag);
$this->db->group_by('card.id');
$query = $this->db->get('card');
return $query;
}
对于标签“2”,这将按预期返回卡“1”。但是,由于 tag_link 中的一个条目将卡“2”与标签“1”连接起来,卡“2”也被错误地返回。
我想过使用上述函数获得第一个命中数组,然后在 php 中减去另一个数组,其中包含所有卡片,包括我不感兴趣的标签。但是这个解决方案感觉非常笨拙。解决这个问题最有效的方法是什么?
谢谢, 奇异果