gpt4 book ai didi

php - 如何使用 ci 事件记录排除与某些标签关联的数据库条目

转载 作者:行者123 更新时间:2023-11-29 13:32:47 25 4
gpt4 key购买 nike

我在 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 中包含所有卡片(包括我不感兴趣的标签)的另一个数组。然而这个解决方案感觉非常笨拙。解决这个问题最有效的方法是什么?

谢谢,奇异果

最佳答案

我对 CI 不太了解,但作为 SQL 查询,这可能有效(混合 SQL 和 php 的伪代码):

SELECT id
FROM cards
WHERE id NOT IN
(
SELECT card FROM tag_link WHERE tag IN $tags
)

子查询返回包含特定标签的所有卡 ID。然后主查询返回所有其他卡 ID。 (请注意,子查询可能会导致非常大的表和/或复杂查询中的性能问题)

关于php - 如何使用 ci 事件记录排除与某些标签关联的数据库条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com