sql >> Databasteknik >  >> RDS >> Mysql

Uppföljare:multipla where-sats

Jag antar att du frågar om Sequelize sätt att göra frågan. Jag är inte säker på om jag förstår din fråga rätt. Du letar efter två frågor:

  • Fråga alla artiklar från användare som följs,
  • Fråga prenumererat land/tagg/artikel för specifik användare,

Låt mig börja med associationerna mellan modellerna.

// in User model definition
User.belongsToMany(User, { as: 'Followers', through: 'Followers', foreignKey: 'userId', otherKey: 'followId' });
User.hasMany(Subscribe, { foreignKey: 'userId' });
User.hasMany(Article, { foreignKey: 'userId' });

Med hjälp av ovanstående association kan vi nu fråga alla artiklar från följda användare

models.User.findByPrimary(1, {
    include: [
        {
            model: models.User,
            as: 'Followers',
            include: [ models.Article ]
        }
    ]
}).then(function(user){
    // here you have user with his followers and their articles
});

Ovanstående fråga skulle generera resultat liknande

{
    id: 1,
    Followers: [
        {
            id: 4,
            Articles: [
                {
                    id: 1,
                    title: 'article title' // some example field of Article model
                }
            ]
        }
    ]
}

Om du vill fråga land/tagg/artikel som prenumereras av en specifik användare, måste du göra andra associationer i Subscribe modell

// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });

Nu har vi alla associationer som krävs för att utföra den andra frågan du bad om

models.User.findByPrimary(1, {
    include: [
        {
            model: models.Subscribe,
            include: [ models.Tag, models.Country, models.Article ]
        }
    ]
}).then(function(user){
    // here you get user with his subscriptions
});

I det här exemplet får du användare med alla hans prenumerationer nås via user.Subscribes , som kommer att ha kapslade attribut Tag , Country och Article . Om användaren prenumererar på Tag , båda Country och Article skulle vara NULL i det här fallet.



  1. INITCAP() Funktion i Oracle

  2. Det går inte att trunkera tabellen eftersom den refereras av en FOREIGN KEY-begränsning - SQL Server / TSQL Tutorial Del 70

  3. Finns det en funktion för att dela en sträng i PL/SQL?

  4. Så här kontrollerar du din PostgreSQL-version