私のRailsアプリケーションでは、HealthcareCenterと呼ばれるテーブルがあります。複数のOrder by Railsを適用する方法
私は、以下の注文に基づいてヘルスケアセンターをリストしたいと思います(ページごとに50レコードをリストする必要があります)。
- recommentations数(ユーザがログインした場合)
- 評価(最初の高い評価)
- 距離(最初の設定距離は< 25キロ、25と100との間の第2の距離、第三の任意の距離が、昇順でなければなりません)
私は、画像の下による説明します
0123画像で我々はcurrenly私はので、このクエリは、(私に高い評価と診療所のリストを与える私は
HealthcareCenter.where("healthcare_centers.name LIKE ?", "%#{query}%")
.where(type_id: type_id)
.order("healthcare_centers.overall_rating DESC")
.calculate_distance2a(lat, lon)
.order("distance")
.order("healthcare_centers.name")
.offset(offset)
.limit(limit)
def self.calculate_distance2a(orig_lat, orig_lon, dist = nil)
lat1, lon1, lat2, lon2 = the_square(orig_lat, orig_lon, dist)
self.select(" healthcare_centers.id,
ROUND(
6371 * 2 * ASIN (SQRT (
POWER(SIN((#{orig_lat} - healthcare_centers.latitude)*pi()/180/2),2)
+ COS(#{orig_lat} * pi()/180)
* COS(healthcare_centers.latitude *pi()/180)
* POWER(SIN((#{orig_lon} - healthcare_centers.longitude) *pi()/180/2), 2)
)),2) as distance"
)
.where("healthcare_centers.longitude between #{lon1} and #{lon2}")
.where("healthcare_centers.latitude between #{lat1} and #{lat2}")
.order("distance")
end
を書かれている
clicnicsを注文すべき画像のSQLに示す5つの診療所、などを見ることができますチェックユーザーは、それらの距離コンディを含める方法を超える25キロは
あなたは上の私を導いてくださいすることができ、高い評価を持っているので、私のDBにログインしている)が、最初の結果
として私よりも大きい25キロを与えませんン
1)< = 25
2)> 25 & & < = 100
3)> 100(以下25キロ我々は2を持っている場合
は検討)ASC順序でなければなりませんClicnics.Clinic A 4.3(評価)、2Kmの距離、Clinic B 3(評価)、評価に基づく1.5km Clinic Aは上にリストする必要があります。
私はトリックを行う必要がありレーティングその後、第一の距離で注文すると思う列の別名として距離を計算する必要があります。.. '.ORDER(「距離ASC、healthcare_centers.overall_rating DESC」)' –
私たちは25KM未満であれば2 Clicnics.Clinic A 4.3(評価)、2Kmの距離、Clinic B 3(評価)、1.5kmの評価に基づいてクリニックAは上にリストする必要があります。最初に。それは間違った@Mdです。ファハンメモン – vinothini