MySQL - 在指定HAVING时使用COUNT()返回总计结果

MySQL - 在指定HAVING时使用COUNT()返回总计结果

问题描述:

使用下面的查询,我可以搜索给定半径内的属性并返回结果。MySQL - 在指定HAVING时使用COUNT()返回总计结果

SELECT id, address, (3959 * acos(cos(radians(53.184815)) * cos(radians(lat)) * cos(radians(lng) - radians(-3.025741)) + sin(radians(53.184815)) * sin(radians(lat)))) AS distance 
FROM properties 
WHERE area = 1 HAVING distance <= 1 
ORDER BY price DESC, distance ASC 
LIMIT 0, 10 

但是我现在想添加分页,因此“LIMIT 0,10”但不知何故让查询返回的总成绩。例如,如果有100个结果,但我们仅限于前10个结果,则返回总数为100.

我试着在select后添加“COUNT(*)AS total”,但是这导致了零结果被退回。

如何让查询以这种方式返回总数?

+0

SQL_CALC_FOUND_ROWS和SELECT FOUND_ROWS();之后; – splash58

+0

SQL_CALC_FOUND_ROWS显然最多慢10倍:http://stackoverflow.com/questions/186588/which-is-fastest-select-sql-calc-found-rows-from-table-or-select-count – Reado

+0

total means ,行数或总属性为数字? – Avishake

我认为这将需要一个子查询来实现这一目标:

SELECT 
    id, address, (3959 * acos(cos(radians(53.184815)) * cos(radians(lat)) * cos(radians(lng) - radians(-3.025741)) + sin(radians(53.184815)) * sin(radians(lat)))) AS distance, 
    (SELECT count(*) FROM properties WHERE area = 1 HAVING (3959 * acos(cos(radians(53.184815)) * cos(radians(lat)) * cos(radians(lng) - radians(-3.025741)) + sin(radians(53.184815)) * sin(radians(lat))))<= 1) AS total 
FROM properties 
WHERE area = 1 HAVING distance <= 1 
ORDER BY price DESC, distance ASC 
LIMIT 0, 10 

要么你必须使用一个单独的查询,而无需使用次数限制(*)或指示飞溅,在您的查询,然后发出使用SQL_CALC_FOUND_ROWS一个SELECT FOUND_ROWS();获得总数。

您可以尝试在您的主查询中将count(*)查询作为子查询插入,但对于我来说,这只是查询的不必要的复杂性。