我有一个像这样的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
Run Code Online (Sandbox Code Playgroud)
我在查询中有很多where子句.如何改进此查询以获得完整的行数?我不想在没有LIMIT的情况下再使用一个请求.
Shu*_*ken 35
你要找的是这个
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();
Run Code Online (Sandbox Code Playgroud)
您可以将SQL_CALC_FOUND_ROWS与FOUND_ROWS()一起使用来计算执行该查询时的结果数.基本上你只需在'SELECT'之后添加'SQL_CALC_FOUND_ROWS',然后再运行另一个查询'SELECT FOUND_ROWS()'.无法在同一查询中发回计数,因为在查询完成之前它无法知道计数.
小智 5
自上次回答起4年了,但这就是我解决问题的方法.尽管SaltLake的答案对我来说是个错误,但它确实让我得到了正确答案.
SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION
SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL
ORDER BY IssueDate, VolumeNo
Run Code Online (Sandbox Code Playgroud)
UNION部分非常重要,因为它会将您在SECOND选择结果中检索到的所需答案(总行数)标记到FIRST选择结果上.
另一个非常重要的一点是,因为UNION正在发生,所以两个表中的列数必须相同.这通常意味着您必须使用最重要的FOUND_ROWS()值填充SECOND Select,然后填充许多NULL值.
最终结果将是一个将返回11行信息的命令,其中一行包含总行数.显然,当您使用结果时,您将需要排除额外的TotalRows行.
| 归档时间: |
|
| 查看次数: |
25984 次 |
| 最近记录: |