关于tag标签功能的实现
2013-12-16 09:06
162 查看
实验室的项目,需要做对用户发布的主题进行打标签的功能,实现思路如下:
一、数据库表的设计
1.tag表
2.topic表
1.用户创建主题时,给自己发布的主题打上了几个标签,点击提交
2.后台接受参数后,先把数据插入到qa_topic表中,获得了topicId;
3.把用户输入的标签转成数组,批量插入到数据库中,sql代码如下:
4. 根据标签数组,查询插入后,这些标签的tagId(返回一个链表):
5.然后,把tagId和topicId批量插入到qa_tag_topic:
6.把topicId返回即可。
三、问题
尚未测试这种方法的效率究竟如何……==
一、数据库表的设计
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返回即可。
三、问题
尚未测试这种方法的效率究竟如何……==
相关文章推荐
- 关于多台笔记本通过WIFI组网后实现一些功能
- 关于PHP如何用实现防止用户在浏览器上使用后退功能重复提交输入
- 关于ArcGIS常用功能的实现
- 关于图文识别功能相关技术的大致实现
- 关于用VS实现开机自启动功能(win7/winXp)
- 关于iOS中简单实现调用系统相机及相册功能
- 关于 JS实现 返回上一页 功能
- 关于FCKEditor编辑器标题图片功能的实现
- Android关于微博发表微博时@好友后删除@的好友的功能实现
- 关于Odoo 选择供应商实现产品过滤功能
- 关于在所有页面实现没有登录就转到登录页面的功能
- VC 关于Web Browser控件操作IE,网页缩放功能实现。。
- 关于使用mybatis几个功能的实现
- Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能
- Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能
- 关于Qt使用QNetworkAccessManager下载文件(实现断点续传功能)
- 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能
- 关于如何使用block实现和协议一样的功能分析
- 关于UGUI实现拖拽功能的接口(IBeginDragHandler、IEndDragHandler、IDragHandler )需注意的问题
- 关于lucene2.0的创建、检索和删除功能的完整实现