如何处理序列化嵌套/复合查询?

问题描述 投票:1回答:2

我对如何使用Sequelize处理嵌套的WHERE感到困惑。该文档实际上没有这样的示例。我有一个查询,看起来像这样:

SELECT * FROM Users WHERE likes <= $likeVariable AND ( likes < $likeVariable OR id < $idVariable ) ORDER BY likes DESC, id DESC

我需要此查询来对基于非唯一属性likes的基于光标的分页,这就是为什么我需要建议的id属性为建议的here

如何将其转换为我的Sequelize查询?

var users = await Users.findAndCountAll({
    where: ????, <- How do I do the WHERE clause?
    order: [['likes', 'DESC'], ['id', 'DESC']]
});
javascript sql sequelize.js
2个回答
0
投票

[我相信我已经知道了,心理障碍发现不必在属性中使用[Op.or]

where: {
    likes: {
        [Op.lte]: $likeVariable
    },
    [Op.or]: [
        {
            likes: {
                [Op.lt]: $likeVariable
            }
        },
        {
            id: {
                [Op.lt]: $idVariable
            }
        }
    ]
}

结果,我的终端打印出了Sequelize生成的以下SQL查询:

SELECT * FROM `Users` AS `User` 
WHERE (`User`.`likes` < 6 OR `User`.`id` < 85) 
AND `User`.`likes` <= 6 
ORDER BY `User`.`hypes` DESC, `User`.`id` DESC;

感谢吉姆让我走上正确的路!


0
投票

尝试一下

var users = await Users.findAll({
 where: {
  likes: {
   [Op.lte]: $likeVariable,
   [Op.and]: {
    [Op.or]: [
      {likes: { [Op.lt]: $likeVariable} },
      { id: { [Op.lt]: $idVariable } }
    ]
   },
  }
 },
 order: [['likes', 'DESC'], ['id', 'DESC']]
});
© www.soinside.com 2019 - 2024. All rights reserved.