我有一个SQL查询(使用mysql作为数据库),现在需要在node.js中将其重写为sequelize.js查询。SQL查询
SELECT p.UserID, SUM(p.score), u.username FROM Picks p LEFT JOIN Users u ON p.UserId = u.id GROUP BY p.UserId;
我不太确定如何构造这个查询才能得到与sequelize相同的结果。
irlmq6kh1#
这应该可以满足您的需求:
db.Pick.findAll({ attributes: [ 'UserID', [db.sequelize.fn('SUM', db.sequelize.col('score')), 'score'] ], include: [{ model: db.User, required: true, attributes: ['username'] }], group: ['UserID'] }).then((results) => { ... })
9wbgstp72#
也许可以试试这个(我假设您已经将Picks和Users联系起来了),您可以通过pick.user.username访问user.name:
Picks
Users
pick.user.username
Picks.findAll({ attributes: ['UserID', [sequelize.fn('SUM', 'score'), 'sumScore']] groupBy: ['UserID'] include: [ model: Users ] });
ycl3bljg3#
我知道这个问题是旧的,但这个答案可能会帮助其他人。我已经找到了一个在线转换器,可以转换原始SQL到Sequelize。链接为https://pontaku-tools.com/english/当从这个网站转换我得到了以下回应。
Picks.hasMany(Users,{foreignKey: '', as: 'u'}); var _q = Picks; _q.findAll({ include: [{model: Users, as: 'u', required: false,}, ], attributes: [[sequelize.fn('SUM', sequelize.col('p.score')), 'p.score'],['p.UserID', 'p.UserID'],['u.username', 'u.username']], group: [''], });
idv4meu84#
使用 sequelize 函数 编写 sql 查询 可能 并 不 总是 很 简单 , 有时 我 建议 通过 将 它 与 此 函数 组合 来 运行 您 的 普通 sql 查询 。
const { QueryTypes } = require('sequelize'); async message_page (req,res) { const messagePage = await db.query("SELECT * FROM ..", { type: QueryTypes.SELECT }); return messagePage;},
中 的 每 一 个
4条答案
按热度按时间irlmq6kh1#
这应该可以满足您的需求:
9wbgstp72#
也许可以试试这个(我假设您已经将
Picks
和Users
联系起来了),您可以通过pick.user.username
访问user.name:ycl3bljg3#
此域的网站不再提供此工具。它现在充满了广告和可能的恶意软件。
我知道这个问题是旧的,但这个答案可能会帮助其他人。我已经找到了一个在线转换器,可以转换原始SQL到Sequelize。
链接为https://pontaku-tools.com/english/
当从这个网站转换我得到了以下回应。
idv4meu84#
使用 sequelize 函数 编写 sql 查询 可能 并 不 总是 很 简单 , 有时 我 建议 通过 将 它 与 此 函数 组合 来 运行 您 的 普通 sql 查询 。
中 的 每 一 个