こんにちは私はSequelizeを使って位置ベースのクエリを実行しようとしていますが、私は悪夢を抱いています!複雑な集約属性をどこに並べ替えるか
Iは、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,
});
生成する:myModel`.`distance`はフィールドではありません `ので、動作しません
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;
。未処理のクエリを使用せずにこの作業を行う方法はありますか?
「どこで」と「持っている」の違いについて知っていました。私たちがそれぞれの生産と開発に使用するmysqlとsqliteの機能が異なるからです。 –
アトリビュートの '*'は、sequelizeで使用すると、テーブルの他のカラムを返すようには見えません。属性が指定されていないかのように、すべての列をすべて列挙することなく、他の列をすべて取得することは可能ですか? –
ああ、あなたは正しいです、私はそれに気付かなかった。答えを更新しました。すべてのモデルフィールド+追加の距離フィールドを返すようになりました。 – piotrbienias