关于tag标签系统的实现

浏览:
字体:
发布时间:2013-12-20 16:18:25
来源:

实验室的项目,需要做对用户发布的主题进行打标签的功能,纠结甚久,实现思路如下:

一、数据库表的设计

1.tag表 

create table qa_tag(tag_id int primary key auto_increment,tag_name varchar(32) not null,tag_time timestamp not null default CURRENT_TIMESTAMP,refered_cnt int not null default 0,user_id int not null,unique (tag_name),constraint foreign key (user_id) references user_info(user_id));2.topic表  
create table qa_topic(topic_id int primary key auto_increment,topic_title varchar(128) not null,topic_body text not null,topic_time timestamp not null default CURRENT_TIMESTAMP,user_id int not null,tags varchar(128) not null default '');
3.tag与topic的映射表

 create table qa_tag_topic
(
record_id int primary key auto_increment,
tag_id int not null,
topic_id int not null,
constraint foreign key (tag_id) references qa_tag(tag_id),
constraint foreign key (topic_id) references qa_topic(topic_id)
);

二、逻辑实现  

1.用户创建主题时,给自己发布的主题打上了几个标签,点击提交

2.后台接受参数后,先把数据插入到qa_topic表中,获得了topicId;

3.把用户输入的标签转成数组,批量插入到数据库中,sql代码如下: 

<insert id="insertTags" parameterType="java.util.List">	    insert into qa_tag(tag_name,user_id) values	    <foreach collection="list" item="o" index="index" separator=",">	        (#{o.tagName},#{o.userId}) 	    </foreach>	    ON DUPLICATE KEY UPDATE refered_cnt = refered_cnt + 1;//如果有重复,则把tag的被引用数目+1	    alter table qa_tag auto_increment = 1//保证tagId的连续性</insert>

4. 根据标签数组,查询插入后,这些标签的tagId(返回一个链表): 

<select id="selectTagIds" resultType="com.tcm.dal.qaos.po.TagTopicMapPo">
  SELECT
      tag_id as tagId
  FROM qa_tag
  WHERE tag_name
      in
  <foreach item="item" index="index" collection="array"
      open="(" separator="," close=")">
        #{item}
  </foreach>
</select>


5.然后,把tagId和topicId批量插入到qa_tag_topic: 

<insert id="insertTagTopicMap" parameterType="java.util.List">
    insert ignore into qa_tag_topic(tag_id,topic_id) values
    <foreach collection="list" item="o" index="index" separator=",">
        (#{o.tagId},#{o.topicId})
    </foreach>
</insert>


6.把topicId返回即可。
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();