私のクエリは、私が望んでいることを正確に行っていないようです。結果が 2 行以上である限り、クエリは結果を取得します。単一の行を取得すると、クエリは結果を取得しません。
SELECT
私はできますがDISTINCT (ct.name)
、これはgroup byと同じ問題を引き起こします。
SELECT
ct.name,
( 3959 * acos(cos(radians(52.779716)) * cos(radians( com.gps_lat )) * cos(radians( com.gps_lon ) -
radians(21.84803)) + sin( radians(52.779716) ) * sin( radians( com.gps_lat )))) as distance
FROM cuisine_types as ct
入社した会社がcuisine_typeに所属しているかどうかを確認するために退社しました
LEFT JOIN company AS com ON (com.cuisine_type_id = ct.id)
ここでは結果をグループ化しているので、料理の種類が 2 回表示されることはありません。これは、結果が2行以上の場合にのみ機能するようです...
GROUP BY ct.name
ここでは、会社の距離がユーザーの優先検索半径内にあるかどうかを確認しています
HAVING distance < 20;
たとえば、料理の種類として「ファーストフード」、「ビーガン」、および「ヘルシー」を指定した場合、検索距離内にその料理の種類に関連する会社がいくつあっても、各料理の種類の 1 つだけが必要です。そのため、GROUP BY を使用して二重の料理タイプを除外します。これが、このクエリでの私のアプローチを理解するのに役立つことを願っています。
注: 1 つの会社に関連付けられている料理の種類は 1 つだけです。
ここにコメントなしの完全な SQL クエリ
SELECT ct.name, ( 3959 * acos( cos( radians(52.779716) ) * cos( radians( com.gps_lat ) ) * cos( radians( com.gps_lon ) - radians(21.84803) ) + sin( radians(52.779716) ) * sin( radians( com.gps_lat ) ) ) as distance FROM food_types as ct LEFT JOIN company AS com ON (com.cuisine_type_id = ct.id) GROUP BY ct.name HAVING distance < 20;