按另一个表中的字段对结果进行排序

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

我有两张桌子。第一个名为“产品”,第二个名为“变体”。 “variants”表包含一个名为“product_id”的字段(它指向“products”表中的产品)和一个名为“price”的字段。

我正在使用 NodeJS 和 Sequelize 与 MySQL 数据库交互。我的目标是检索产品列表并根据“变体”表中的“价格”字段对其进行排序。然而,当我拿到产品清单时,却与我的预期不符。

我还实现了分页的限制和偏移。检查查询后,它会返回如下 SQL 查询:

SELECT `Product`.*,
       `variants`.`id` AS `variants.id`,
       `variants`.`price` AS `variants.price`
FROM
  (SELECT `Product`.`id`,
          `Product`.`title`,
          `Product`.`image`,
          `Product`.`view`,
          `Product`.`status`,
          `Product`.`created_at`
   FROM `products` AS `Product`
   WHERE `Product`.`status` != 'delete'
   GROUP BY `id`
   LIMIT 0,
         10) AS `Product`
LEFT OUTER JOIN `variants` AS `variants` ON `Product`.`id` = `variants`.`product_id`
ORDER BY `variants`.`price` DESC;

我注意到,将限制设置为 10 个产品后,列表按价格排序,但它返回一个价格从 0 开始的列表,而不是像 1000 或 2000 这样的更高值。我想首先按价格对所有产品进行排序,然后取前 10 个。但是,我的代码似乎做了相反的事情。我该如何纠正这个问题?

这就是我所做的:

let query = {
        attributes: ['id', 'title', 'image', 'view', 'status', 'created_at'],
        where: {
            status: {
                [Op.ne]: 'delete'
            }
        },
        include: {
            model: Variants,
            as: 'variants',
            attributes: ['price'],
        },
        order: [[{ model: Variants, as: 'variants' }, 'price', 'DESC']],
        group: 'id',
};

//other code

query.limit = payload.limit;
query.offset = payload.skip;



const products = await Product.findAll(query);
mysql node.js database sequelize.js
1个回答
0
投票

*您可以添加一个新的关键查询 - order = 'ASC', *如果您需要分页,您可以添加分页设置,例如通过添加默认分页添加限制和计数,因为 10 u 将实现您的输出

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