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與第一個查詢相同 - 不變 –