节点sequelize按多列排序

时间:2013-10-19 01:56:00

标签: javascript node.js sequelize.js

来自Ruby / Rails背景,我习惯了这种语法:

Model.all.order('col1 + col2 + col3')

因此,假设col1,col2和col3是整数,它会按照这3列的总和对结果进行排序。

是否有类似的方法使用sequelize进行排序?

3 个答案:

答案 0 :(得分:7)

使用最新的主人(不确定是否已将更改推送到npm),您可以执行以下操作:

Model.findAll({ order: [[{ raw: 'col1 + col2 + col3 DESC' }]]});

导致

ORDER BY col1 + col2 + col3 DESC

或者你可以这样做:

Model.findAll({ order: [[sequelize.fn('SUM', sequelize.col('col1'), sequelize.col('col2'), sequelize.col('col3')), 'DESC']]});

导致

ORDER BY SUM(`col1`, `col2`, `col3`) DESC

我会推荐第二个版本,它将正确地转义列名称。有关详细信息,请参阅http://sequelizejs.com/documentation#models-finders-limit---offset---order---group

答案 1 :(得分:1)

fcvt d0, s20

from spgl1 import spgl1, spg_bp, spg_bpdn

#x01 = psueodinverse of A multiplied by y  
x,resid,grad,info = spgl1(A, y, tau = tau, sigma = epsilon, x0 = x01, iter_lim = 150)

答案 2 :(得分:0)

必须在我的模型的 defaultScope 中按 col1+col2 排序,作为答案提供的 SUM 解决方案返回了续集错误 function sum(numeric, numeric) does not exists(或类似的错误)。

我目前的解决方法:

order: [[ 'col1', sequelize.literal('+'), 'col2', 'DESC']]

将打印出来

ORDER BY "tableName"."col1"+"col2" DESC

只需添加更多的间隔列,并添加 sequelize.literal('+') 以获得更多列。

如果使用包含/连接并且您需要使用表名调用所有列...我尝试了 sequelize.col('col2') 但没有添加表名。我猜测'tableName', sequelize.literal('.'), 'columnName' 这样的组合应该可以工作,但您需要知道您的表名/别名。我无法访问我的模型,因为它是在我的用例中定义的。文档中的 {model: 'model', as: 'alias'} 也失败了。