gpt4 book ai didi

javascript - 如何使用 Sequelize 按最后一条消息日期订购联系人?

转载 作者:行者123 更新时间:2023-12-03 22:43:27 26 4
gpt4 key购买 nike

我正在尝试在 nodejs 中为我的数据库创建一个带有 Sequelize 的聊天应用程序。

一切正常,但是当我尝试显示按最后一条消息日期订购的所有用户 friend 时,我遇到了一个错误。

为了让用户收到那里的消息,它与关联一起工作,但订购却没有。
这是我获取消息的功能:

const getFriends = (id, limit) => {
return new Promise(async (resolve, reject) => {
try {
const user = await Follows.findAll({
where: {
[Op.or]: {
follower_id: id,
followed_id: id
},
},
include: Messages
order: [[Messages, 'createdAt', 'DESC']],
limit
})
resolve(user)
} catch (e) {
reject(e)
}

})
}

所以 Sequeulize 执行查询,但不是我想要的方式。
这是 Sequelize 生成的查询:
SELECT `follows`.*,
`messages`.*
FROM (
SELECT `follows`.* FROM `follows`
WHERE (
`follows`.`follower_id` = 3
OR
`follows`.`followed_id` = 3
)
AND `follows`.`reciprocal` = true
LIMIT 1
)
LEFT OUTER JOIN `messages` ON `follows`.`id` = `messages`.`pairId`
ORDER BY `messages`.`createdAt` DESC;

正如你在这里看到的 ORDER BY messages.createdAt DESC; 发生在最后,但是在 FROM 之后你可以看到他对我已经查询的表进行了查询。

这不是逻辑!

我希望我的 sql 查询看起来像这样:
SELECT `follows`.*,
`messages`.*
FROM `follows`
LEFT OUTER JOIN `messages` ON `follows`.`id` = `messages`.`pairId`
WHERE (
`follows`.`follower_id` = 3
OR
`follows`.`followed_id` = 3
)
AND `follows`.`reciprocal` = true
ORDER BY `messages`.`createdAt` DESC
LIMIT 1

这意味着我希望我的 where 和我的 limit 在父查询中而不是在 FROM 查询中。
我真的不知道如何用 Sequelize 做到这一点,也没有在互联网上找到有同样问题的人。
我真的很高兴能得到一些帮助!

最佳答案

其实我找到了答案。
我只需要添加 subQuery:false 就可以了!

关于javascript - 如何使用 Sequelize 按最后一条消息日期订购联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62106196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com