Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 续集限制包括关联_Javascript_Mysql_Sequelize.js - Fatal编程技术网

Javascript 续集限制包括关联

Javascript 续集限制包括关联,javascript,mysql,sequelize.js,Javascript,Mysql,Sequelize.js,当限制结果并包括相关模型时,我对Sequelize有一个问题 以下内容将生成正确的结果,限制为10并正确排序 Visit.findAll({ limit: 10, order: 'updatedAt DESC', }).success(function(visits) { res.jsonp(visits); }).failure(function(err) { res.jsonp(err); }) SQL 然而,当我添加一个关联时,它会突然限制子查询,因此由于结果集有限,排序

当限制结果并包括相关模型时,我对Sequelize有一个问题

以下内容将生成正确的结果,限制为10并正确排序

Visit.findAll({
  limit: 10,
  order: 'updatedAt DESC',
}).success(function(visits) {
  res.jsonp(visits);
}).failure(function(err) {
  res.jsonp(err);
})
SQL

然而,当我添加一个关联时,它会突然限制子查询,因此由于结果集有限,排序永远不会发生

Visit.findAll({
  limit: 10,
  order: 'updatedAt DESC',
  include: [
    { model: Account, required: true }
  ]
}).success(function(visits) {
  res.jsonp(visits);
}).failure(function(err) {
  res.jsonp(err);
})
SQL

我所期望的是对顶部查询进行限制,如下所示:

SELECT 
  ...
FROM 
  (SELECT ...) AS `Visits`
ORDER BY `Visits`.updatedAt DESC LIMIT 10
LIMIT 10;

您不应该在订单的单个字符串中同时使用键和方向。从:

“用户名描述”, //将返回用户名DESC-即不要这样做

正确的解决方案是:

order: ['updatedAt', 'DESC']
完整的工作示例:

"严格使用",; var Sequelize=需要“Sequelize”; var sequelize=新的sequelize '测试',//数据库 '测试',//用户名 '测试',//密码 { 主机:“localhost”, 方言:“postgres” } ; var Customer=sequelize.定义“客户”{ 名字:{type:Sequelize.STRING}, 姓氏:{type:Sequelize.STRING} }; 变量顺序=续集。定义“顺序”{ 金额:{type:Sequelize.FLOAT} }; var第一客户; Customer.hasManyOrder,{constraints:true}; Order.belongsToCustomer,{constraints:true}; sequelize.sync{force:true} .Then函数{ 返回客户。创建{firstName:'Test',lastName:'Testerson'}; } .Then函数作者1{ firstCustomer=author1; 退货订单。创建{CustomerId:firstCustomer.id,金额:10}; } .Then函数{ 退货订单。创建{CustomerId:firstCustomer.id,金额:20} } .Then函数{ 退货订单.findAll{ 限额:10, 包括:[客户], 订单:[ ['updatedAt','DESC'] ] }; } .Then函数displayResultsresults{ 结果.功能c{ console.dirc.toJSON; }; } .Then函数{ process.exit0; }; 产生:

选择Order.id、Order.amount、Order.createdAt、Order.updatedAt、Order.CustomerId、Customer.id作为Customer.id、Customer.firstName作为Customer.firstName、Customer.lastName作为Customer.lastName、Customer.createdAt作为Customer.createdAt,Customer.updatedAt AS Customer.updatedAt FROM Orders AS Order LEFT外部加入Customers AS Customer ON Order.CustomerId=Customer.id Order BY Order.updatedAt DESC LIMIT 10; 订单字段键型号订单:['FieldOrder','DESC'] 例:

订单字段包括模型 订单:[模型包括,'FieldOrder','DESC'] 例:


我有与上面相同的问题,如果我尝试上面的解决方案,它会在子查询中和子查询外部添加一个ORDERBY子句。子查询外部失败,错误为“未知列…”。。。虽然“顺序”确实存在问题,但不确定这是公认的答案。要避免子查询并在末尾保持限制,您需要调用findAll{subquery:false,…},或findAll{include:{replicing:false,…}。另请参见
SELECT 
  ...
FROM 
  (SELECT ...) AS `Visits`
ORDER BY `Visits`.updatedAt DESC LIMIT 10
LIMIT 10;
order: ['updatedAt', 'DESC']
 db.ModelA.findAll({
    include: [{
        model: db.ModelB
    }],
    order: ['CreatedDateModelA', 'DESC']
})
.then(function(response){
}, function(err){
})
db.ModelA.findAll({
    include: [{
        model: db.ModelB
    }],
    order: [db.ModelB,'CreatedDateModelA', 'DESC']
})
.then(function(response){

}, function(err){

})