在MySQL查询中使用带限制的SELECT时,如何统计所有行?
我有一个mysql查询,如下所示:在MySQL查询中使用带限制的SELECT时,如何统计所有行?,mysql,Mysql,我有一个mysql查询,如下所示: SELECT A.ID, A.NAME, B.ID, B.NAME FROM table1 A JOIN table2 B ON ( A.ID = B.TABLE1_ID ) WHERE cond1, cond2, ..., condN LIMIT 10 我在查询中有许多where子句。 如何改进此查询以获得完整的行数? 我不想无限制地再使用一个请求。在执行该查询时,可以使用来计算结果数。基本上,您只需在“SELECT”之后添加“SQL\u CALC
SELECT A.ID, A.NAME, B.ID, B.NAME
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
cond1, cond2, ..., condN
LIMIT 10
我在查询中有许多where子句。
如何改进此查询以获得完整的行数?
我不想无限制地再使用一个请求。在执行该查询时,可以使用来计算结果数。基本上,您只需在“SELECT”之后添加“SQL\u CALC\u FOUND\u ROWS”,然后运行另一个查询“SELECT FOUND\u ROWS()”。无法在同一查询中发回计数,因为在查询完成之前它无法知道计数。您要查找的是 来自
自从上次回答以来已经四年了,但我就是这样解决这个问题的。虽然索尔特莱克的回答给我带来了一个错误,但它确实让我找到了正确的答案
SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION
SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL
ORDER BY IssueDate, VolumeNo
联合部分非常重要,因为它将在第二个选择结果中检索到的所需答案(总行数)标记到第一个选择结果上
另一个非常重要的点是,由于正在进行联合,两个表中的列数必须相同。这通常意味着您必须用最重要的FOUND_ROWS()值填充第二个Select,然后填充大量空值
最终结果将是一个命令,返回11行信息,其中一行包含总行数。显然,在使用结果时,需要排除额外的TotalRows行 您应该使用
SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
cond1, cond2, ..., condN
LIMIT 10
谢谢这在mysql监视器中运行良好。但是在PHP中,第二个查询返回1。如何在PHP中正确执行这两个查询?您安装了什么PHP版本?请看一看这一重要注意事项:SQL\u CALC\u FOUND\u ROWS在MySQL 8.0中已被弃用,它将在下一版本的MySQL中被删除
SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION
SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL
ORDER BY IssueDate, VolumeNo
SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
cond1, cond2, ..., condN
LIMIT 10