首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列化查询包含与逻辑

问序列化查询包含与逻辑
EN

Stack Overflow用户
提问于 2018-04-15 03:47:37
回答 1查看 469关注 0票数 0

我有三个表:Article、Tag和ArticleTag。通过ArticleTag,一篇文章可以有多个标签,一个标签可以属于多篇文章。Tag有一个name属性。

我想查询所有有标签tag1和(tag2或tag3)和(tag4或tag5)的文章。以下查询不起作用。

代码语言:javascript
复制
Article.findAll({
    where: {},
    include: [
        { 
            model: Tag,
            where: {
                [Op.and]: [
                  { name: 'tag1' },
                  { name: { [Op.or]: ['tag2', 'tag3'] } },
                  { name: { [Op.or]: ['tag4', 'tag5'] } },
                ] 
            }
        }
    ]
})
EN

回答 1

Stack Overflow用户

发布于 2018-04-16 12:50:21

我认为having和group_by会给你带来预期的结果(请务必阅读下面代码中的注释):

代码语言:javascript
复制
Article.findAll({
    where: {},
    include: [
        { 
            model: Tag,
            where: {
                [Op.or]: [ { name: 'tag1' }, { name: 'tag2' }] // change from and to or 
            }
        }
    ]
    group : ['articles.id','tags.id'] , // might need to change table name as per yours
    having : {
        db.sequelize.where(db.sequelize.fn('count', db.sequelize.fn('DISTINCT', db.sequelize.col('articles.id'))),2)                    
    }
});

对于更新的问题,只需在以下位置更改或阻止:

代码语言:javascript
复制
[Op.and]: [
    { name: 'tag1' },
    { name: { [Op.or]: ['tag2', 'tag3'] } },
    { name: { [Op.or]: ['tag4', 'tag5'] } },
] 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49835528

复制
相关文章

相似问题

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