このタイプのクエリを理解できません: これは私のクエリです:
SELECT
accomodation.*,
db_cities.title_en AS city,
db_cities.title_url AS city_url,
db_countries.title_url_en AS country_url
FROM
(SELECT id, aid, title_en, title_url_en, address, city_id, zip, district_id, province_id, region_id, country_id, mountain_id, stars, picture, valid_from, valid_to FROM accomodation ORDER BY info_date_add DESC) AS accomodation
LEFT JOIN db_cities
ON db_cities.id = accomodation.city_id
JOIN db_countries
ON db_countries.id = accomodation.country_id
WHERE
db_countries.title_url_en LIKE '%country%'
AND db_countries.id = '202'
GROUP BY accomodation.aid
ORDER BY CASE
WHEN accomodation.valid_to>=NOW() AND accomodation.valid_from<=NOW() THEN 0
WHEN NOW()>accomodation.valid_to AND accomodation.valid_to!='0000-00-00' THEN 1
ELSE 2 END, accomodation.title_en
LIMIT 10 OFFSET 0
うまく機能しています...skiresort_locationsというテーブルをもう1つ結合する必要がありますが、どの列でも結合されていないため、ONを使用できないという問題があります。緯度経度から計算した距離で結合したいです。
テーブル skiresort_locations には緯度と経度の列があり、テーブル accomodation にも緯度と経度の列があります。テーブル skiresort_locations に参加して、距離が 50km 以下の宿泊施設を表示します。ON のサブクエリを作成するアイデアがありましたが、それが可能かどうかはわかりません。
これは、距離を計算するために選択されています。
(((acos(sin((skiresort_locations.latitude*pi()/180))
* sin((accomodation.latitude*pi()/180))
+ cos((skiresort_locations.latitude*pi()/180)) * cos((accomodation.latitude*pi()/180))
* cos(((skiresort_locations.longitude - accomodation.longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) AS distance
誰かが私の難しい説明を理解し(私の英語で申し訳ありません)、助けてくれることを願っています...