如何对 Sequelize 中的查询结果进行排序?
Posted
技术标签:
【中文标题】如何对 Sequelize 中的查询结果进行排序?【英文标题】:How to sort the result of a query in Sequelize? 【发布时间】:2021-02-03 17:56:42 【问题描述】:我正在尝试返回有序表单查询(升序或降序)的结果,我知道它是使用 order: ['columnName', sort order (ASC / DESC)] 完成的,我做得很好仅根据基础排序到单个列,但假设我有一个包含这些列的表:
product_id、价格、offer_price、offer、描述
并且我想按价格或按offer_price 排序(offer_price 列取决于offer 列,也就是说,只有当offer 列的值为1 时,我才对offer_price 感兴趣,这表明该产品确实在销售)。
我怎样才能将结果返回给我订购,按价格或按价格报价,也就是说,如果产品在销售,我必须在订购时考虑价格报价,如果它不打折,我应该按正常价格。
例如:
Product1:product_id = 1,price = 9,000,offer_price = 8,500,offer = 1,描述:'yy'
Product2:product_id = 2,price = 2,000,offer_price = 500,offer = 0,描述:'bbb'
Product3:product_id = 3,price = 1,500,offer_price = 1,000,offer = 1,描述:'ccccc'
查询结果按升序排列应该是:product3,product2,product1。由于 product3 正在销售并且是所有产品中的最低价格 (1,000),因此产品 2 如下(它的 price_offer = 500 但未在销售,因此采用正常价格 (2,000),最后是 product3 (8,500 ))。
如何使用 Sequelize 实现这一点?我找不到可以帮助我处理文档的东西。
【问题讨论】:
你使用什么 DBMS? @Anatoly mysql. @Anatoly 我忘了添加,我已经添加了 Mysql 标签。 【参考方案1】:你可以像这样使用 MySQL IF function:
order: [sequelize.literal('(IF(offer = 1, offer_price, price))'), sort order (ASC / DESC)]
【讨论】:
我正在通过一个对象设置查询,如下所示:query.order=[]; query.order.push(Sequelize.literal('(IF(oferta = 1, precio_oferta, precio))', sort order (ordenar)));
但它向我显示了这个错误:query.order.push(Sequelize.literal('(IF(oferta = 1, precio_oferta, precio))', sort order (ordenar)));^^^^SyntaxError: missing ) after argument list
以上是关于如何对 Sequelize 中的查询结果进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 ComosDb 中的聚合函数结果对查询结果进行排序?