根据具体情况续订订单

问题描述 投票:0回答:1

考虑我有用户表,我想用“where:{id:[3,1,2]}”过滤其中的一些表 我希望结果与我刚刚设置的 id 顺序相同,意味着首先返回 id 为 3 的用户,然后返回 id 为 1 的用户,最后返回 id 为 2 的用户。 我如何告诉sequelize 这样做?

await db.Users.findAll({
    where:{id:[3,1,2]},
});
sql mysql node.js sequelize.js
1个回答
0
投票

要在使用具有特定 ID 的 where 条件时在 Sequelize 中实现所需的顺序,您可以将 order 选项与文字函数一起使用。

我觉得应该有用

// Your list of user IDs *****
const userIds = [3, 1, 2];

// Query to fetch users with specified IDs in the given order *****
const users = await User.findAll({
  where: {
     id: {
       [Op.in]: userIds,
     },
  },
  order: [
      Sequelize.literal(`FIELD(id, ${userIds.join(',')})`),
   ],
});

在上面的例子中:

  • Op.in用于过滤指定ID的用户。
  • Sequelize.literal 用于提供原始 SQL 表达式,以便根据所需的 ID 顺序进行排序。 FIELD 函数用于指定顺序。

注意:如果输入未经净化,使用 Sequelize.literal 会使查询容易受到 SQL 注入的攻击。确保在查询中使用 userIds 数组之前对其进行清理,以防止潜在的安全问题。

© www.soinside.com 2019 - 2024. All rights reserved.