MySQL - 使用 COUNT() 到 return 指定 HAVING 时的总结果

MySQL - Using COUNT() to return total results when HAVING is specified

使用下面的查询,我可以搜索给定半径内的属性,结果是 returned。

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" 但不知何故查询 return 总结果。例如,如果有 100 个结果,但我们只限制前 10 个结果,return 总数为 100。

我尝试在 select 之后添加 "COUNT(*) AS total" 但这导致 returned 结果为零。

这样怎么查询return总数?

我认为它需要一个子查询来实现:

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

您要么必须使用 count(*) 不受限制的单独查询,要么如提示所示,在查询中使用 SQL_CALC_FOUND_ROWS,然后发出 SELECT FOUND_ROWS(); 以获取总数。

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