#mysql #node.js #express #sequelize.js #sequelize-typescript
Вопрос:
Я хочу получить информацию о голосах с отношениями в группе в соответствии с аудиоидом, но мой код работает не так, как предполагалось. 'user. id'
разбейте группу и покажите один за другим голоса.
в чем проблема с моим кодом? и как группироваться только с аудиоидом, а также извлекать связанные данные
try {
const votes = await globalVotes.findAll({
group: ['audioId', 'mediaType', 'audio.id', 'user.id'],
attributes: [
'audioId',
'mediaType',
[Sequelize.fn('SUM', Sequelize.col('totalVote')), 'total_vote'],
[Sequelize.fn('MAX', Sequelize.col('voterEmail')), 'latest_email'],
[Sequelize.fn('COUNT', Sequelize.col('voteCount')), 'total_vote_count'],
[Sequelize.fn('MAX', Sequelize.col('vottingNum')), 'latest_number'],
[Sequelize.fn('MAX', Sequelize.col('globalVotes.user_Id')), 'latest_user'],
[
Sequelize.fn('MAX', Sequelize.col('globalVotes.updatedAt')),
'latest_time',
],
],
include: [
{
model: Audio,
attributes: ['aTitle', 'aImage', 'audioFolderId'],
include: [
{
model: AudioFolder,
attributes: ['folderName'],
},
],
group: ['audioFolderId.id'],
},
{
model: User,
attributes: ['fullName'],
},
],
order: [[Sequelize.fn('SUM', Sequelize.col('totalVote')), 'DESC']],
raw: true,
nest: true,
});
console.log(votes);
res.status(200).render('admin/chart/audio/index', {
title: 'Manage Audio Votes',
votes,
});
надеюсь, я получу какую-нибудь информацию,
Комментарии:
1. Вы пытаетесь сгруппироваться по идентификатору пользователя и в то же время получить агрегацию с ним
Sequelize.fn('MAX', Sequelize.col('globalVotes.user_Id')), 'latest_user'
. Удалите любой из них, чтобы запрос был более последовательным.2. И, конечно, Sequelize не так подходит для сложных агрегаций, это больше связано с операциями CRUD и ассоциациями загрузки.
3. @Анатолий, тогда каково решение ?
4. Вы должны выбрать, хотите ли вы рассчитать
Sequelize.fn('MAX', Sequelize.col('globalVotes.user_Id')), 'latest_user'
или сгруппировать поuser.id