我正在尝试通过执行以下操作向查询添加计算/计算/虚拟列:
knex.select(knex.raw('DATEDIFF("2018-04-15", STR_TO_DATE(birthdate, "%d/%m/%Y")) / 365.25 as age'))
.from('user')
.orderBy('age', 'desc');
但是,我最终得到以下错误:
BadRequest: select count(`user`.`id`) as `total` from `user` order by `id` desc, `age` desc - Unknown column 'age' in 'order clause'
我认为它可能与我构建查询的方式有关,但它似乎没有将计算列识别为可以订购的列。
答案 0 :(得分:0)
您可以使用orderByRaw
并重复您的表达,而不仅仅是别名
knex.select(knex.raw('DATEDIFF("2018-04-15", STR_TO_DATE(birthdate, "%d/%m/%Y")) / 365.25 as age'))
.from('user')
.orderByRaw('DATEDIFF("2018-04-15", STR_TO_DATE(birthdate, "%d/%m/%Y")) / 365.25', 'desc');
我猜knex会生成另一个查询,以获取除select()
部分之外的记录总数。
答案 1 :(得分:0)
您的错误请求错误和knex查询不匹配。该错误来自其他一些查询(从该knex查询构建的计数查询)。
您可以在此处查看生成的查询:https://runkit.com/embed/4au5bdj29j8j
select DATEDIFF("2018-04-15", STR_TO_DATE(birthdate, "%d/%m/%Y")) / 365.25 as age from `user` order by `age` desc
Knex不会自动生成任何计数查询。
如果您使用普通的knex,则应使用order by
方法http://knexjs.org/#Builder-clearOrder
.clearOrder
部分
如果该计数查询是由您正在使用的某个ORM创建的,那么解决方案取决于该ORM如何避免此问题。