gpt4 book ai didi

mysql - 如何通过 Bookshelf.js 更好地使用 SQL 别名

转载 作者:行者123 更新时间:2023-11-29 17:48:18 26 4
gpt4 key购买 nike

项目堆栈:Express.js、MySQL、Bookshelf.js

我在 Bookshelf.js 中有一个名为 Request 的模型。这些请求具有经度和纬度。使用该模型的方法被赋予经度和纬度。我想要查询最接近给定坐标集的 50 个请求。因此,如果我在 MySQL 语句中执行此操作,我将使用如下所示的查询。

var longitude = ... 
var latitude = ...

"SELECT * FROM REQUESTS" +
"WHERE STATE_OF_REQUEST = 'unfulfilled'" +
"ORDER BY SQRT(POW(" + longitude + " - LONGITUDE, 2) + POW(" + latitude + " - LATITUDE, 2))"

但是我不想使用 SQL 语句来执行此操作。我宁愿用 ORM bookshelf.js 来做。

http://bookshelfjs.org

所以我想知道是否有人帮我想出一些干净的代码来做到这一点。

Request.query(( queryItem) => {
queryItem.limit(max);
queryItem.where('STATE_OF_REQUEST', 'unfulfilled');
queryItem.orderBy("SQRT(POW(" + response[0].location.lng + " - LONGITUDE, 2) + POW(" + response[0].location.lat + "- LATITUDE , 2))");
}).fetchAll().then((models) => {
return callBack ({
success: true,
data: models,
});
});

此代码返回时出现此错误?

Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column 'SQRT(POW(-93.0331135 - LONGITUDE, 2) + POW(41.70712109999999- LATITUDE , 2))' in 'order clause'

最佳答案

使用.orderByRaw()来自克尼克斯:

queryItem.orderByRaw("SQRT(POW(" + response[0].location.lng +
" - LONGITUDE, 2) + POW(" + response[0].location.lat +
"- LATITUDE , 2))");

在这种情况下,您并不完全使用 Bookshelf,而是访问它直接使用的查询引擎。这样您就可以访问 Knex 公开的所有方法,因此每当您在 Bookshelf 中使用 .query.where 时,都应该引用 Knex 的文档。

关于mysql - 如何通过 Bookshelf.js 更好地使用 SQL 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49621374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com