首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理序列化嵌套/复合查询?

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

Stack Overflow用户
提问于 2019-10-05 10:16:54
回答 2查看 79关注 0票数 1

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

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

我需要这个查询在非惟一属性likes上进行基于指针的分页,这就是为什么我需要id属性suggested here的原因

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

代码语言:javascript
复制
var users = await Users.findAndCountAll({
    where: ????, <- How do I do the WHERE clause?
    order: [['likes', 'DESC'], ['id', 'DESC']]
});
EN

回答 2

Stack Overflow用户

发布于 2019-10-05 10:49:09

尝尝这个

代码语言:javascript
复制
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']]
});
票数 0
EN

Stack Overflow用户

发布于 2019-10-05 11:29:23

我相信我已经弄明白了,精神上的障碍是发现[Op.or]不一定要在属性中使用:

代码语言:javascript
复制
where: {
    likes: {
        [Op.lte]: $likeVariable
    },
    [Op.or]: [
        {
            likes: {
                [Op.lt]: $likeVariable
            }
        },
        {
            id: {
                [Op.lt]: $idVariable
            }
        }
    ]
}

因此,我的终端打印出以下由Sequelize生成的SQL查询:

代码语言:javascript
复制
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;

感谢Jiml让我走上了正确的道路!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58244841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档