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”,但是这导致了零结果被退回。
如何让查询以这种方式返回总数?
答
我认为这将需要一个子查询来实现这一目标:
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(*)查询作为子查询插入,但对于我来说,这只是查询的不必要的复杂性。
SQL_CALC_FOUND_ROWS和SELECT FOUND_ROWS();之后; – splash58
SQL_CALC_FOUND_ROWS显然最多慢10倍:http://stackoverflow.com/questions/186588/which-is-fastest-select-sql-calc-found-rows-from-table-or-select-count – Reado
total means ,行数或总属性为数字? – Avishake