留言模块,MySQL查询数据问题

2022-09-22 10:17:03 浏览数 (2)

记录一下个人在写博客“留言模块”遇到的问题。

由于本想使用一张表完成留言数据的查询,其中包括留言ID和父留言ID字段。通过父留言ID判断名下是否包含子级;最后返回给前端展示。

但在这就遇到了些问题,如果留言包含回复的话,一张表的话就必须全部查询出来,然后再递归排序。但留言数据过多会导致查询速度慢,而且只能前端分页;果断就放弃了这个想法。

看了看百度发现,可以使用两张表,一张留言表,一张留言回复表,通过留言ID,主外键绑定起来。然后嵌套子查询,实现分页查询。

留言表:

留言回复表:

PlainBashC C#CSSDiffHTML/XMLJavaJavascriptMarkdownPHPPythonRubySQL

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.myvue.mapper.leaveMapper">

<resultMap id="extOrganMap" type="com.example.myvue.pojo.LeaveWord">

<result property="leaveWordId" column="leave_id"/>

<result property="leaveWordUserId" column="leave_user_id"/>

<collection column="leave_reply" property="leaveWordReplys" resultMap="replyMap">

<id column="leave_reply_id" property="id"/>

</collection>

</resultMap>

<resultMap id="replyMap" type="com.example.myvue.pojo.LeaveWordReply">

<id column="leave_reply_id" property="id"/>

<result property="leaveWordFatherId" column="leave_father_id"/>

<result property="leaveWordReplyId" column="leave_reply_id"/>

<result property="leaveWordReplyContent" column="leave_reply_content"/>

</resultMap>

<!--获取留言-->

<select id="getLeaveWord" resultMap="extOrganMap">

select `leave_word`.*,

`leave_reply`.*

from `leave`

left join `leave_reply` on leave_reply.leave_father_id = `leave_word`.leave_id

where `leave_word`.leave_id in (select z.leave_id from (select x.leave_id from `leave_word` as x order by x.leave_date asc limit #{page} ,#{limit}) as z)

order by `leave_word`.leave_date desc, `leave_reply`.leave_reply_date desc;

</select>

</mapper>

最后结果就是实现了留言的查询,并且可以使用分页,无需一次性把数据全部查询出来而影响查询速度。 原文地址

0 人点赞