1
我有一个项目表和一个类别表。每个项目都与它的坐标,纬度(lat)和经度(lon)一起保存,以允许用户在地理上进行搜索。两个相同的公式产生不同的结果
当我搜索项目时,那些与用户具有完全相同纬度和经度的项目会显示在一个查询中,而不会显示在另一个查询中。
一个查询只是在一个范围内(< 1)选择一个类别(2)内的所有项目。
SELECT *, c.name as category, c.category_id as CATid,
(3959 * acos(cos(radians(52.993252))
* cos(radians(i.latitude))
* cos(radians(i.longitude) - radians(-0.412470))
+ sin(radians(52.993252))
* sin(radians(i.latitude)))) AS distance
from items i
join categories c on i.category=c.category_id
where i.category=2 group by i.item_id
HAVING distance < 1
order by distance
其他查询选择的所有类别和计数的项目数每个类别内,在指定的地理范围内(< 1)
SELECT *, (SELECT (count(3959 * acos(cos(radians(52.993252))
* cos(radians(latitude))
* cos(radians(longitude)
- radians(-0.412470))
+ sin(radians(52.993252))
* sin(radians(latitude))))) AS distance
FROM items
WHERE category = category_id
HAVING distance < 2 ) AS howmanyCat,
(SELECT name FROM categories WHERE category_id = c.parent) AS parname
FROM categories c ORDER BY category_id, parent
奇怪的是,如果改变为距离所述搜索参数到就可以找到它的第二个查询!
任何想法?
Here is a fiddle to show what I mean
但第一个查询产生一行 - 因此,如果我模仿查询内count()它应该仍然返回1?这是我可以考虑搜索别名但不显示它的唯一方式,因为我只能在更大的别名中只有一个字段 - 如果这很有意义 –
请注意,您在第一个查询中有一个GROUP BY,但第二个查询中没有。 HAVING子句用于数据后期分组。 – gwaigh
尝试添加group_id与第一个查询相同 - 不变 –