看来我的查询并不完全符合我的要求。只要结果是 2 行或更多行,查询就会得到结果。当我得到一行时,查询没有得到任何结果。
在SELECT
I can doDISTINCT (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
离开加入公司以检查公司是否附属于美食类型
LEFT JOIN company AS com ON (com.cuisine_type_id = ct.id)
在这里,我将结果分组,因此没有美食类型出现两次。这似乎只在结果为 2 行或更多行时才有效......
GROUP BY ct.name
在这里,我正在检查公司的距离是否在用户偏好的搜索范围内
HAVING distance < 20;
例如,如果我将“快餐”、“素食”和“健康”作为美食类型,那么无论搜索距离中有多少公司与该美食类型相关,我都只想要每种美食类型中的一种。因此,我使用 GROUP BY 过滤掉双重美食类型,希望这有助于理解我在此查询中的方法。
注意:公司只有一种美食类型。
没有注释的完整sql查询在这里
SELECT ct.name, ( 3959 * acos( cos( 弧度(52.779716) ) * cos( 弧度( com.gps_lat ) ) * cos( 弧度( com.gps_lon ) - 弧度(21.84803) ) + sin( 弧度(52.779716) ) * sin( 弧度( com.gps_lat ) ) ) ) 作为距离从美食类型作为 ct 左加入公司作为 com ON (com.cuisine_type_id = ct.id) GROUP BY ct.name HAVING distance < 20;