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;

SQL Playground

我还在 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'
            });
        }
    }