toxi标记系统,如何查询表以获得独特的结果

时间:2014-04-04 10:24:13

标签: mysql database-design tags tagging

我为标记系统使用以下数据库模式。这是一个温和的定制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表是共享的。但我只需要查询主题。

0 个答案:

没有答案