0
你好我正在嘗試使用Sequelize來執行基於位置的查詢,而我正在做一個噩夢!在何處訂購複雜聚合屬性以及訂購
我試圖生成SQL:
SELECT *, (3959 * acos(cos(radians([user-latitude])) * cos(radians(latitude)) * cos(radians(longitude) - radians([user-longitude])) + sin(radians([user-latitude])) * sin(radians(latitude)))) AS distance FROM myModel HAVING distance <= 25 ORDER BY distance ASC LIMIT 0 , 10;
其中[用戶緯度]和[用戶經度]是變量。到目前爲止,我有這樣的:
myModel.findAll({
attributes: [
'*',
[`(3959 * acos(cos(radians(${user-latitude})) * cos(radians(latitude)) * cos(radians(longitude) - radians(${user-longitude})) + sin(radians(${user-latitude})) * sin(radians(latitude))))`, 'distance'],
],
where: {
distance: {
$lte: 25,
},
},
order: [
['distance', 'ASC'],
],
limit: 10,
offset: 0,
});
產生:
SELECT *, (3959 * acos(cos(radians([user-latitude])) * cos(radians(latitude)) * cos(radians(longitude) - radians([user-longitude])) + sin(radians([user-latitude)) * sin(radians(latitude)))) AS `distance` FROM `myModels` AS `myModel` WHERE `myModel`.`distance` <= 15 ORDER BY `myModel`.`distance` ASC LIMIT 0, 10;
不工作,因爲`myModel`.`distance`不是現場。有沒有辦法使這項工作不使用原始查詢?
我意識到'where'和'having'之間的區別,因爲它們的功能在我們分別用於生產和開發的mysql和sqlite之間有所不同。將測試代碼並返回給您:) –
通過sequelize使用時,屬性中的'*'不會返回表中的其他列。是否有可能獲得所有其他列,就像沒有指定屬性,沒有列出所有其他列? –
哦,你說得對,我沒注意到。我已經更新了答案,現在它應該返回所有模型字段+附加距離字段。 – piotrbienias