当前位置:   article > 正文

mysql的UUID获取上一篇下一篇(上一条 下一条)应用实例_mysql上一条下一条功能实现

mysql上一条下一条功能实现

先讲原理:

有上一篇下一篇(上一条 下一条),肯定是在:搜索条件下,排序规则固定的场景下,得到的一个查询集合(列表)中的一个效果。
1.我们在这两个条件(搜索条件where 排序规则order),给查询结果集给利用rownum(一个顺序自增的标号)
2.查询出目标uuid的rownum值x.
3.查询上一条和下一条: rownum = x-1的uuid 得到上一条 rownum = x+1的uuid 得到下一条


实际应用:

一个固定的检索条件 固定排序的查询:

SELECT
	bn.*
FROM
	base_notice bn
LEFT JOIN (
	SELECT
		GROUP_CONCAT(userinfo.STR_NAME) AS toUserNames,
		GROUP_CONCAT(touser.STR_GUID) AS addresseeGuids,
		GROUP_CONCAT(touser.STR_USER) AS touserIds,
		GROUP_CONCAT(touser.is_read) AS isReads,
		notice.STR_GUID AS noticeId
	FROM
		base_notice notice
	LEFT JOIN base_notice_addressee touser ON touser.STR_NOTICE_GUID = notice.STR_GUID
	LEFT JOIN base_user userinfo ON touser.str_user = userinfo.STR_GUID
	WHERE
		notice.STR_CREATE_USER_ID = '1367646365085077505'
	AND notice.STR_TYPE = 2
	AND (
		touser.IS_DELETE = 0
		AND touser.IS_ENABLE = 1
	)
	GROUP BY
		notice.STR_GUID
) tempT1 ON bn.STR_GUID = tempT1.noticeId
WHERE
	bn.IS_DELETE = 0
AND bn.IS_ENABLE = 1
AND bn.STR_CREATE_USER_ID = '1367646365085077505'
ORDER BY
	bn.DT_GET_DATE DESC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

在这里插入图片描述
增加rownum:(对比上面sql与下面sql 加入 --标记的操作)
说明:实际应用中通常获取上一条 下一条的uuid即可 这里我结果集 我增加了rowNum后,只查询了uuid
这个代码只观察标记位置的实际操作下面附上不带“–”的效果和结果:

-- SELECT
-- 	rownum AS rowNum,
-- 	STR_GUID AS strGuid
-- FROM
-- 	(
		SELECT
-- 			@rownum :=@rownum + 1 AS rownum,
			bn.*
		FROM
-- 			(SELECT @rownum := 0) r,
			base_notice bn
		LEFT JOIN (
			SELECT
				GROUP_CONCAT(userinfo.STR_NAME) AS toUserNames,
				GROUP_CONCAT(touser.STR_GUID) AS addresseeGuids,
				GROUP_CONCAT(touser.STR_USER) AS touserIds,
				GROUP_CONCAT(touser.is_read) AS isReads,
				notice.STR_GUID AS noticeId
			FROM
				base_notice notice
			LEFT JOIN base_notice_addressee touser ON touser.STR_NOTICE_GUID = notice.STR_GUID
			LEFT JOIN base_user userinfo ON touser.str_user = userinfo.STR_GUID
			WHERE
				notice.STR_CREATE_USER_ID = '1367646365085077505'
			AND notice.STR_TYPE = 2
			AND (
				touser.IS_DELETE = 0
				AND touser.IS_ENABLE = 1
			)
			GROUP BY
				notice.STR_GUID
		) tempT1 ON bn.STR_GUID = tempT1.noticeId
		WHERE
			bn.IS_DELETE = 0
		AND bn.IS_ENABLE = 1
		AND bn.STR_CREATE_USER_ID = '1367646365085077505'
		ORDER BY
			bn.DT_GET_DATE DESC
-- 	) tempT
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
 SELECT
 	rownum AS rowNum,
 	STR_GUID AS strGuid
 FROM
 	(
		SELECT
 			@rownum :=@rownum + 1 AS rownum,
			bn.*
		FROM
 			(SELECT @rownum := 0) r,
			base_notice bn
		LEFT JOIN (
			SELECT
				GROUP_CONCAT(userinfo.STR_NAME) AS toUserNames,
				GROUP_CONCAT(touser.STR_GUID) AS addresseeGuids,
				GROUP_CONCAT(touser.STR_USER) AS touserIds,
				GROUP_CONCAT(touser.is_read) AS isReads,
				notice.STR_GUID AS noticeId
			FROM
				base_notice notice
			LEFT JOIN base_notice_addressee touser ON touser.STR_NOTICE_GUID = notice.STR_GUID
			LEFT JOIN base_user userinfo ON touser.str_user = userinfo.STR_GUID
			WHERE
				notice.STR_CREATE_USER_ID = '1367646365085077505'
			AND notice.STR_TYPE = 2
			AND (
				touser.IS_DELETE = 0
				AND touser.IS_ENABLE = 1
			)
			GROUP BY
				notice.STR_GUID
		) tempT1 ON bn.STR_GUID = tempT1.noticeId
		WHERE
			bn.IS_DELETE = 0
		AND bn.IS_ENABLE = 1
		AND bn.STR_CREATE_USER_ID = '1367646365085077505'
		ORDER BY
			bn.DT_GET_DATE DESC
 	) tempT
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

在这里插入图片描述

然后假设我们需要查询uuid =“100” 的上一条和下一条,只需要在上面sql后面增加 where条件查询
where strGuid='100’的rowNum值。

  where tempT.STR_GUID='100'
  • 1

在这里插入图片描述
我们看到 strGuid=‘100’ 他的rownum=2 很容易,我们知道他的上一条rowNum=1 下一条rowNum=3
于是 我们修改上面sql语句的条件

   where rownum in (1,3);
  • 1

在这里插入图片描述
从结果集中我们看出了:上一条uuid 下一条uui都有了

当前被查的uuid的rownum=1 即:第一条的结果集

where rownum in (0,2);
  • 1

在这里插入图片描述
当前被查的uuid的rownum=3 即:最后一条的结果集

where rownum in (2,4);
  • 1

在这里插入图片描述

第一条和最后一条怎么辨别?

我们利用查询条件 当前被查的uuid rownum=x

得到结果集 rownum= x-1 strGuid非null 即:上一条有值 得到结果集 rownum= x+1
strGuid非null 即:下一条有值

上一条 null 下一条非null :当前为第一条 上一条 非null 下一条非null :非头条和末条的中间中的一条 上一条 非null
下一条null :当前为最后一条 上一条null 下一条null:非当前条件内的查询记录。

上一条uuid下一条uuid当前被查询uuid结论
null非null第一条
非null非null非头条和末条的中间中的一条
非nullnull最后一条
nullnull:非当前条件内的查询记录

以上。你学废了吗!?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/938618
推荐阅读
相关标签
  

闽ICP备14008679号