在续集中,我可以使用
my_table.findAll({ order: [['datetime', 'desc']] })
按列查询数据和排序。但是当我尝试使用参数化的原始查询时:
var input_parameters = {order_column: 'datetime', order: 'desc'};
sequelize.query('select * from my_table order by :order_column :order', { replacements: input_parameters, type: models.sequelize.QueryTypes.SELECT });
它无法返回正确的顺序,因为 订单信息asc / desc在查询中进行转义,最终准备好的查询类似于从“my_table”订单中选择*日期时间' '降序'&#39 ;.
有没有办法将订单信息传递给原始参数化查询?
答案 0 :(得分:0)
这可能不是续集的方式,但是......如果:
"/BridgeSP" + "/" + SPId
答案 1 :(得分:0)
我想知道同样的事情。但是我认为原始查询中没有选项。
因此,我通常在class methods
中定义model
,以使用类似后续的方法。
/**
* usage :
*
* model.findSomething({
* where: whereCondition,
* limit: limit,
* offset: offset,
* order: [
* ['col1', 'asc'],
* ['col2', 'desc']
* ]})
*/
model.findSomething = function ({where, limit, offset, order}) {
let sql = 'SELECT col1, col2 FROM some_table '
... (build where conditions)
// build order conditions
if (order && order.length > 0) {
let orderBy = ' ORDER BY '
for (let i = 0; i < order.length; i++) {
if (order[i].length > 0) { // [column] or [column, asc/desc]
orderBy += (i > 0 ? ', ' : ' ') + order[i].join(' ')
}
}
sql += orderBy
} else {
sql += ` ORDER BY comment_group, comment_depth, comments.comment_id`
}
... (build limit and offset)
}
在调用sequelize.query
之前,只需先构建sql statement
。
答案太迟了,但是希望这对您有所帮助。
答案 2 :(得分:-1)
let order_column = 'something';
let order = 'DESC';
sequelize.query('select * from my_table order by " + order_column +' ' order, { replacements: input_parameters, type: models.sequelize.QueryTypes.SELECT })