【问题标题】:Sequelize Case Sensitive Query -- Using BINARYSequelize 区分大小写的查询——使用 BINARY
【发布时间】:2018-10-17 05:39:27
【问题描述】:

这是我在 mysql 中的查询

我想在 sequelize orm 中使用这个查询

 SELECT
        `uid`,
        `username`
    FROM
        `users` AS `users`
    WHERE
        BINARY 
        `users`.`username` IN ('hammad', 'sAad')
    AND `users`.`status` = 'ACTIVE'
    ORDER BY
        FIELD(
            `username`,
            'hammad',
            'saad.ahmed'
        )
    LIMIT 20;

我要对查询进行续集

【问题讨论】:

  • 到目前为止你有什么尝试?
  • let results = await db.models.users.findAll({ attributes: ['uid', 'username'], where: { username: db.sequelize.where(db.sequelize.literal('BINARY username'), 'IN (', '${ users.join("', '") }' )), status: 'ACTIVE' }, order: !_.isEmpty(users) ? [[db.sequelize.fn('FIELD', db.sequelize.col('username'), ...users)]] : [], limit: 20 });

标签: mysql node.js sequelize.js


【解决方案1】:
UserModel.findAll({
  attributes: ['uid', 'username'],
  where : {
     username : {
          [Op.in]: [ 'hammad' , 'sAad']
        },
     status : 'active'
     },
  order : ['username']
});

【讨论】:

    【解决方案2】:

    这是查找条件区分大小写的解决方案

    db.models.users.findAll({
    
                attributes: ['uid', 'username'],
                where: {
                    username: db.sequelize.where(
                        db.sequelize.literal('BINARY username IN ('),
                        `'${users.join("', '")}'`,
                        db.sequelize.literal(')'),
                    ),
                    status: 'ACTIVE'
                },
                order: !_.isEmpty(users) ? [[db.sequelize.fn('FIELD', db.sequelize.col('username'), ...users)]] : [],
                limit: 20
            });
    

    【讨论】:

      【解决方案3】:

      [Op.and]: where(fn('binary', col('username')), { [Op.in]: ['xxx','xxx2'] })

      【讨论】:

        猜你喜欢
        • 2017-06-03
        • 2019-11-20
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        相关资源
        最近更新 更多