Sql Sequelize - 需要带分页的随机数据
Sql Sequelize - Need Random Data with pagination
我需要分页的数据库中的随机数据。
我们数据库中的示例数据:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
我需要限制 = 3,当前页面 = 1,以及来自数据库的随机数据。
像这样的第一页数据 [2,5,1] 然后第二页数据永远不会重复。
有解决办法吗?
我将它用于随机数据,但它在分页中不起作用。
Sequelize.fn( 'RAND' )
在 PostgreSQL 中,您可以使用以下方法:
SELECT setseed(0.5);
SELECT *, random() as ord FROM temp ORDER BY ord OFFSET 0 LIMIT 3;
SELECT setseed(0.5);
SELECT *, random() as ord FROM temp ORDER BY ord OFFSET 3 LIMIT 3;
SELECT setseed(0.5);
SELECT *, random() as ord FROM temp ORDER BY ord OFFSET 6 LIMIT 3;
我还在 Sequalize 文档中找到了以下内容:
Subtask.findAll({
// Will order randomly based on the dialect (instead of fn('RAND') or fn('RANDOM'))
order: sequelize.random(),
offset: 0,
limit: 3
});
https://sequelize.org/master/manual/model-querying-basics.html
下面的操作方法你可以实现分页
async read(req: Request, res: Response) {
try {
logging.info(NAMESPACE, 'enter read()', req.body);
const limit = req.query?.limit as number | undefined;
let page = req.query?.page as number | undefined;
if (!page)
page = 0;
let offset = 0;
if (limit)
offset = 0 + (page - 1) * limit;
const records = await TodoInstance.findAll({ where: {}, limit: limit, offset: offset });
return res.json({
records,
msg: 'Fetched todos',
status: 200
});
}
catch (error) {
logging.error(NAMESPACE, 'Error while reading todo', error);
return res.json({
msg: 'fail to read todo',
status: 500,
route: '/read'
});
}
}
我需要分页的数据库中的随机数据。
我们数据库中的示例数据:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
我需要限制 = 3,当前页面 = 1,以及来自数据库的随机数据。 像这样的第一页数据 [2,5,1] 然后第二页数据永远不会重复。
有解决办法吗?
我将它用于随机数据,但它在分页中不起作用。 Sequelize.fn( 'RAND' )
在 PostgreSQL 中,您可以使用以下方法:
SELECT setseed(0.5);
SELECT *, random() as ord FROM temp ORDER BY ord OFFSET 0 LIMIT 3;
SELECT setseed(0.5);
SELECT *, random() as ord FROM temp ORDER BY ord OFFSET 3 LIMIT 3;
SELECT setseed(0.5);
SELECT *, random() as ord FROM temp ORDER BY ord OFFSET 6 LIMIT 3;
我还在 Sequalize 文档中找到了以下内容:
Subtask.findAll({
// Will order randomly based on the dialect (instead of fn('RAND') or fn('RANDOM'))
order: sequelize.random(),
offset: 0,
limit: 3
});
https://sequelize.org/master/manual/model-querying-basics.html
async read(req: Request, res: Response) {
try {
logging.info(NAMESPACE, 'enter read()', req.body);
const limit = req.query?.limit as number | undefined;
let page = req.query?.page as number | undefined;
if (!page)
page = 0;
let offset = 0;
if (limit)
offset = 0 + (page - 1) * limit;
const records = await TodoInstance.findAll({ where: {}, limit: limit, offset: offset });
return res.json({
records,
msg: 'Fetched todos',
status: 200
});
}
catch (error) {
logging.error(NAMESPACE, 'Error while reading todo', error);
return res.json({
msg: 'fail to read todo',
status: 500,
route: '/read'
});
}
}