【问题标题】:Sql Sequelize - Need Random Data with paginationSql Sequelize - 需要带有分页的随机数据
【发布时间】:2021-07-12 10:04:26
【问题描述】:

我需要分页数据库中的随机数据。

我们数据库中的示例数据:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

我需要限制 = 3,当前页面 = 1,来自数据库的随机数据。 像这样的第一页数据 [2,5,1] 然后第二页数据永远不会重复。

有什么解决办法吗?

我将它用于随机数据,但它不适用于分页。 Sequelize.fn('RAND')

【问题讨论】:

  • 你使用什么数据库?

标签: sql node.js database random sequelize.js


【解决方案1】:

下面的动作方法可以实现分页

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

【讨论】:

    【解决方案2】:

    在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多