2012-05-27 63 views
0

COUNT(*)在下面的查詢是選擇在表users,而不是行數,其中distance小於50COUNT()在選擇表中的行數

行數的計數請你能告訴我爲什麼查詢選擇users表中的行數而不是距離小於50的行數?

謝謝先進。

SELECT COUNT(*), (6371 * ACOS(COS(RADIANS(51.61050836267012)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(- 0.23701071739196777)) + SIN(RADIANS(51.61050836267012)) * SIN(RADIANS(latitude)))) 
AS distance 
FROM `users` 
AS `u` 
HAVING distance <=50 
+0

你有什麼錯誤?或者你的結果如何不正確? –

+0

COUNT(*)將返回15而不是距離<= 50的行數(3) –

回答

2

HAVING應與GROUP BY表達。要限制行數給定的標準使用WHERE distance <= 50

+0

'distance'不是表'用戶'中的字段名稱,它只是從( 6371 * acos(....))函數 –

+0

是的,但是您已經將它用作第二個投影元素的別名,您可以在'WHERE'子句中引用它 –

+0

PHPMyAdmin似乎不同意:'未知列距離' in'where clause'' –

0

HAVING上聚合值作品(如SUM(列)具有一定條件) 你應該在你的情況

+0

它不會讓我在WHERE子句中使用'distance',因爲它不是字段名稱 –

0

使用WHERE代替HAVING having子句不會在行上過濾,就像您的計數函數的where子句一樣。嘗試使用子查詢。

相關問題