我为标记系统使用以下数据库模式。这是一个温和的定制toxi解决方案。
表:
Tags { tag_id, tag_name }
Tagmap { id, topic_type, topic_id, tag_id
Topics { topic_id, etc. }
如果我想获得与给定标签匹配的主题,则subject_type = 1.这是因为我需要更灵活,并且还希望将标签用于其他事物。
这是我当前根据标签获取相关主题的查询。这个问题是结果不是唯一的。如果有多个标签链接到主题,我会在结果集中获得重复的主题。
查询被切割到最小。根据选项的不同,有一些变化和优化等等。但是在我伸出援助之后,我可以自己解决这个问题。
SELECT tm.id, tm.subject_id, topic.channel_id, topic.title, channel.privacy, channel.name
FROM tagmap tm
INNER JOIN topics topic
ON topic.id = tm.subject_id
INNER JOIN user_channels channel
ON channel.id = topic.channel_id
AND channel.privacy < 2
AND tm.TagID IN ('.$this->_sqlTagIds.')
AND tm.SubjectTypeID = 1
ORDER BY tm.id
DESC
LIMIT 10
问题:
如果一个主题标记了searchtagids中出现的多个标记,则会多次列出该主题。所以我搜索的是一种只提取一次subject_id的方法。 Disctinct不起作用,因为我需要tagmapid(tm.id),它对每一行都是唯一的。
帮助会很好。感谢。
编辑:根据标签查询表格中的主题,并检查主题所属频道的隐私是否低于2.
PS:此查询仅适用于主题。 tagmap表是共享的。但我只需要查询主题。