关于tag标签系统的实现
实验室的项目,需要做对用户发布的主题进行打标签的功能,纠结甚久,实现思路如下:
一、数据库表的设计
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返回即可。
- 06-16卡巴斯基郑启良:支持信创发展是卡巴斯基的重要使命
- 06-16访问管理是确保现代工作场所安全的的五个关键原因
- 06-16零信任安全的演变:彻底改变网络安全策略
- 06-16GitHub上值得关注的20个网络安全项目
- 06-16英国曼彻斯特大学遭遇网络攻击,机密数据或遭窃!
- 06-16调查表明广告软件推送恶意软件感染了六万多个安卓应用程序
- 06-16微软向美国政府提供GPT的大模型,安全性如何保证?
- 06-16如何保护OT环境免受安全威胁?
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复