mysql 根据具体情况确定顺序

qcbq4gxm  于 2024-01-05  发布在  Mysql
关注(0)|答案(1)|浏览(132)

假设我有一个用户表,我想用“where:{id:[3,1,2]}”过滤其中的一些用户,我希望结果与我刚才设置的id顺序相同,这意味着第一个返回id为3的用户,然后是id为1的用户,最后一个返回id为2的用户。

  1. await db.Users.findAll({
  2. where:{id:[3,1,2]},
  3. });

字符串

mnemlml8

mnemlml81#

当使用具有特定ID的where条件时,要在Sequelize中实现所需的顺序,可以将order选项沿着。
我觉得应该可以

  1. // Your list of user IDs *****
  2. const userIds = [3, 1, 2];
  3. // Query to fetch users with specified IDs in the given order *****
  4. const users = await User.findAll({
  5. where: {
  6. id: {
  7. [Op.in]: userIds,
  8. },
  9. },
  10. order: [
  11. Sequelize.literal(`FIELD(id, ${userIds.join(',')})`),
  12. ],
  13. });

字符串
在上面的例子中:

  • Op.in用于过滤具有指定ID的用户。
  • literal用于提供一个原始的SQL表达式,以便根据ID的期望顺序进行排序。FIELD函数用于指定顺序。
    注:使用Sequelize.literal会使查询容易受到SQL注入的攻击,如果输入没有经过清理的话。请确保在查询中使用userIds数组之前对其进行清理,以防止潜在的安全问题。
展开查看全部

相关问题