在mysql查询中使用select with limit时如何统计所有行?

ep6jt1vc  于 2021-06-25  发布在  Mysql
关注(0)|答案(5)|浏览(342)

我的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子句。如何改进此查询以获得完整的行计数?我不想再无限制地使用一个请求。

4ktjp1zp

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行。

mutmk8jj

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()
qoefvg9y

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();
w8rqjzmb

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
pwuypxnk

pwuypxnk5#

可以使用sql\u calc\u found\u rows()和found\u rows()来计算执行查询时的结果数。基本上,您只需在“select”之后添加“sql\u calc\u found\u rows”,然后运行另一个查询“select found\u rows()”。无法在同一查询中发回计数,因为在查询完成之前无法知道计数。

相关问题