sequelize 关联查询求和

有一张产品表,还有一张规格表,规格表里有销量字段,我怎样查出产品排序按照总销量排序。谢谢。

clipboard.png

阅读 5k
2 个回答

sequlize要做关联查询必须两个表是有关系的

如果建立了关系
product 表

Specifications 表

如果是一对多的情况
可以通过

product.findAll({
    include:[
        {
            attributes:[
                'id',
                'name'
                [sequelize.fn('sum', Specifications.col('销量'), 'asname'],
            ]
            model:Specifications,
            order: [
                sequelize.fn('max', 'asname'),
            ]
        }
    ],
    
})

比如说我有table1,table2模型

table1

const Sequelize = require('sequelize');
const connect = require('../../db/db_tp.js');
const  table1 = connect.define('table1', {
    id: {type:Sequelize.INTEGER,primaryKey: true,autoIncrement: true},
    ustr: Sequelize.STRING(10),
    pstr:Sequelize.STRING(10),
},{
    tableName: 'table1'//指定表名
})
module.exports = table1;

table2

const Sequelize = require('sequelize');
const connect = require('../../db/db_tp.js');
const  table2 = connect.define('table2', {
    id: {type:Sequelize.INTEGER,primaryKey: true,autoIncrement: true},
    ustr: Sequelize.STRING(10),
    pstr:Sequelize.STRING(10),
},{
    tableName: 'table2'//指定表名
})
module.exports = table2;

封装table1table2的index.js

const connect = require('../../db/db_tp.js');
let table1 = require('./table1.js');
let table2 = require('./table2.js');
let table3 = require('./table3.js');

//定义关系
table1.hashMany(xxxxx);

//同步到数据库
connect.sync(xxxx);

module.exports = {
    table1,
    table2,
    table3,
}

使用的地方 route.js

let {table1,table2,table3} = require('./index')

table1.findAll({
    include:[
        {
            attributes:[
                'id',
                'name',
                [sequelize.fn('sum', sequelize.col('销量'), 'asname'],
            ],
            model:table2,
            order: [
                sequelize.fn('max', 'asname'),
            ]
        }
    ],
}).then(res=>{
    //do something
},err=>{
    //do something
})

来查询

只是做个示例,具体情况按照你的来写。
详细学习你可以看看

Sequelize 中文API文档-3. 模型(表)之间的关系/关联

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题