按标签查询主题的sql怎么写比较合理

台俊峰 发布于 2014/04/20 16:10
阅读 280
收藏 0

主题(topic)与标签(tag)是多对多关系。表达能力不好,我直接上一段代码:

StringBuilder sql = new StringBuilder();
List<Object> params = new ArrayList<Object>();
sql.append(" select distinct t.* from topic t ");
sql.append(" left join topic_tag tt on tt.topic_id=t.id ");
// 标签查询
if (tagIdArr != null && tagIdArr.length > 0) {
	sql.append(" where tt.tag_id in (");
	for (int i = 0; i < tagIdArr.length; i++) {
		if (i != tagIdArr.length - 1) {
			sql.append(" ?, ");
		} else {
			sql.append(" ? ");
		}
		params.add(tagIdArr[i]);
	}
	sql.append(" ) ");
}



这是我现在的方法,表topic左连接topic_tag表,最后查询到多个重复记录再去重。

请问,你们都是怎么做的,有没有什么好的方法?

加载中
1
kenyon_君羊
kenyon_君羊

可以用一些冗余的办法,比如topic表冗余tag字段,再建立一个tag_topic关系表来冗余topic字段,就可以了吧,就是插入的时候需要插2次

0
台俊峰
台俊峰

引用来自“kenyon_君羊”的评论

可以用一些冗余的办法,比如topic表冗余tag字段,再建立一个tag_topic关系表来冗余topic字段,就可以了吧,就是插入的时候需要插2次

我问的是查询怎么处理比较好,不是存数据。

0
0
红星xx
红星xx

楼上都告诉你 他的想法了 。 从存数据入手 ,不就很好查了吗?

0
台俊峰
台俊峰

引用来自“红星xx”的评论

楼上都告诉你 他的想法了 。 从存数据入手 ,不就很好查了吗?

好吧,其实我是表结构已经定下来了,前面的存储功能已经写好了。你们讲的我都明白了,以后再做这样的功能,考虑这样存。
返回顶部
顶部