实现文章上一篇和下一篇的两种方式:
1.获取数据列表,通过程序判定当前文章的上一篇和下一篇;
注意:数据量少的话用以上方式解决,但是如果数据量较大则效率低下,请参考第二种实现方式;
@RequestMapping(value="detail${urlSuffix}")
public String detail(ConfigGovernmentMessage configGovernmentMessage, HttpServletRequest request, HttpServletResponse response, Model model) {
ConfigGovernmentMessage governmentMessage = configGovernmentMessageService.get(configGovernmentMessage);
model.addAttribute("governmentMessage", governmentMessage);
ConfigGovernmentMessage messages = new ConfigGovernmentMessage();
messages.setStatus(DictUtils.getDictValue("上架", "on_off_show", "1"));
List<ConfigGovernmentMessage> list = configGovernmentMessageService.findList(messages);
ConfigGovernmentMessage beforeMessage = null;
ConfigGovernmentMessage afterMessage = null;
int idx = 0;
for (ConfigGovernmentMessage message : list) {
if(governmentMessage.getId().equals(message.getId())){
break;
}
idx++;
}
if(list.size() >1) {
if(idx==0){
afterMessage = list.get(idx+1);
}else if(idx==list.size()-1){
beforeMessage = list.get(idx-1);
}else{
beforeMessage = list.get(idx-1);
afterMessage = list.get(idx+1);
}
}
model.addAttribute("beforeMessage", beforeMessage);
model.addAttribute("afterMessage", afterMessage);
ConfigSystemClassify configSystemClassify = new ConfigSystemClassify();
List<ConfigSystemClassify> classifyList = configSystemClassifyService.findList(configSystemClassify);
model.addAttribute("classifyList", classifyList);
return "front/app/government/governmentMessageDetail";
}
2.通过sql的行号(rownum)实现上一篇和下一篇
mysql实现:
mysql本身没有行号,可以通过@rownum1 := 0
定义变量实现,如下:
SELECT
m.*
FROM
(
SELECT
a.id,
(@rownum1 := @rownum1 + 1) AS rownum
FROM
cms_article a,
(SELECT @rownum1 := 0) b
) m -- 1.查询文章列表以及行号(rownum)
,
(
SELECT
c.rownum
FROM
(
SELECT
a.id,
(@rownum2 := @rownum2 + 1) AS rownum
FROM
cms_article a,
(SELECT @rownum2 := 0) b
) c
WHERE
c.id = '1000000957611871'
) n -- 2.查询当前文章在文章列表中的行号
WHERE
m.rownum > n.rownum -- 3.通过比较行号来寻找上一篇和下一篇,大于号(>)代表下一篇,小于号(<)代表上一篇
LIMIT 1
oracle实现:
oracle本身自带伪列行号,不用像mysql那样操作,如下:
SELECT
m.*
FROM
(
SELECT
a.id,
rownum
FROM
cms_article a
) m -- 1.查询文章列表以及行号(rownum)
,
(
SELECT
c.rownum
FROM
(
SELECT
a.id,
rownum
FROM
cms_article a
) c
WHERE
c.id = '1000000957611871'
) n -- 2.查询当前文章在文章列表中的行号
WHERE
m.rownum > n.rownum -- 3.通过比较行号来寻找上一篇和下一篇,大于号(>)代表下一篇,小于号(<)代表上一篇
LIMIT 1