我的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子句。如何改进此查询以获得完整的行计数?我不想再无限制地使用一个请求。
4ktjp1zp1#
“离上次回答已经4年了,但我就是这样解决问题的。虽然Solr特莱克的回答给我带来了一个错误,但它确实让我找到了正确的答案。
SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL ORDER BY IssueDate, VolumeNo
union部分非常重要,因为它将在第二个select结果中检索到的所需答案(总行数)标记到第一个select结果上。另一个非常重要的点是,因为正在进行联合,所以两个表中的列数必须相同。这通常意味着您必须用非常重要的found_rows()值填充第二个select,然后填充大量空值。最终结果将是一个命令,返回11行信息,其中一行包含总行数。显然,在使用结果时需要排除额外的totalrows行。
mutmk8jj2#
解决方案来自http://is.php.net/manual/en/function.mysql-num-rows.php#83647
SELECT SQL_CALC_FOUND_ROWS '0', z.id FROM zoom AS z LIMIT 0,6 UNION SELECT '1', FOUND_ROWS() ORDER BY `0` DESC , RAND()
qoefvg9y3#
你要找的是这个
SELECT SQL_CALC_FOUND_ROWS 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 SELECT FOUND_ROWS();
w8rqjzmb4#
你应该使用
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
pwuypxnk5#
可以使用sql\u calc\u found\u rows()和found\u rows()来计算执行查询时的结果数。基本上,您只需在“select”之后添加“sql\u calc\u found\u rows”,然后运行另一个查询“select found\u rows()”。无法在同一查询中发回计数,因为在查询完成之前无法知道计数。
5条答案
按热度按时间4ktjp1zp1#
“离上次回答已经4年了,但我就是这样解决问题的。虽然Solr特莱克的回答给我带来了一个错误,但它确实让我找到了正确的答案。
union部分非常重要,因为它将在第二个select结果中检索到的所需答案(总行数)标记到第一个select结果上。
另一个非常重要的点是,因为正在进行联合,所以两个表中的列数必须相同。这通常意味着您必须用非常重要的found_rows()值填充第二个select,然后填充大量空值。
最终结果将是一个命令,返回11行信息,其中一行包含总行数。显然,在使用结果时需要排除额外的totalrows行。
mutmk8jj2#
解决方案来自http://is.php.net/manual/en/function.mysql-num-rows.php#83647
qoefvg9y3#
你要找的是这个
w8rqjzmb4#
你应该使用
pwuypxnk5#
可以使用sql\u calc\u found\u rows()和found\u rows()来计算执行查询时的结果数。基本上,您只需在“select”之后添加“sql\u calc\u found\u rows”,然后运行另一个查询“select found\u rows()”。无法在同一查询中发回计数,因为在查询完成之前无法知道计数。