我有一个查询,它使用“include”将 2 个表连接到 sequelize。 我通过使用“属性:false”来使用左连接。
一切都按预期进行,但我想按平均值或“评级”列对获取的结果进行降序排序,因此我获得了每个事件的最佳评级。 >
这里的关联:
events.hasMany(users_events_liked, {
as: "liked_events",
foreignKey: "id_events",
});
events.hasMany(event_ratings, { foreignKey: "id_event" });
event_ratings.belongsTo(events, { foreignKey: "id_event" });
users_events_liked.belongsTo(events, { foreignKey: "id_events" });
这里是查询:
module.exports = (app) => {
app.get("/api/getAllCurrentEvents", auth, async (req, res) => {
try {
let results = await events.findAll({
group: "id",
where: {
start_time: { [Op.gte]: moment().toDate() },
},
include: [
{
model: event_ratings,
required: false,
attributes: [
[Sequelize.fn("avg", Sequelize.col("rating")), "ratings"],
],
},
{
model: users_events_liked,
required: false,
attributes: [
[
Sequelize.fn("COUNT", Sequelize.col("id_events")),
"number_of_participants",
],
],
},
],
** HERE I WANT TO ORDER BY AVERAGE on rating.
order : [[]]
**
});
res.json(results);
} catch (err) {
res.status(500).json(err);
console.log(err);
}
});
我尝试了什么:
order: [
[event_ratings, Sequelize.fn("AVG", Sequelize.col("rating")), "DESC"],
],
mysql 出现以下错误:
GROUP BY `id` ORDER BY `event_ratings`.AVG(`rating`) DESC;"
我们也可以像文档所说的那样定位一个关联的模型:
order: [[event_ratings, "rating", "DESC"]],
它有效,但这不是每个事件的平均评分。
编辑:
我终于用litteral来编辑它了:
顺序:[[Sequelize.literal("liked_events.number_of_participants
"), "DESC"]