【发布时间】:2018-06-30 08:16:59
【问题描述】:
我想用sequelize来实现这个sql查询。
select id, date, comment
from posts
where (date, id) > ('2018-01-01', 1)
order by date, id
limit 10
这种查询用于无限滚动分页。关于如何做到这一点的任何想法?文档没有说明行值
【问题讨论】:
标签: node.js postgresql sequelize.js
我想用sequelize来实现这个sql查询。
select id, date, comment
from posts
where (date, id) > ('2018-01-01', 1)
order by date, id
limit 10
这种查询用于无限滚动分页。关于如何做到这一点的任何想法?文档没有说明行值
【问题讨论】:
标签: node.js postgresql sequelize.js
正如@GondonLinoff 指出的那样,查询可以重写。
我已经使用 explain analyze 分析了 postgres 上两个查询的性能,它没有任何影响(似乎行值只是语法糖,但 dba 专家可以解释这一点)。
所以,在接下来的 where 子句中应该被实现为:
const filter = {}
filter[Op.or] = [
{
date: {
[Op.gt]: sinceDate
}
},
{
[Op.and]: {
date: sinceDate,
id: {
[Op.gt]: sinceId
}
}
}
const result = await Posts.findAll({ where: filter })
【讨论】:
如果问题是where,可以改写为:
where date > '2018-01-01' or (date = '2018-01-01' and id > 1)
【讨论】:
(date, id) 上有索引,这可能会影响性能。