【问题标题】:SQL_CALC_FOUND_ROWS and SELECT FOUND_ROWS() on UNION query (not UNION ALL) with LIMITSQL_CALC_FOUND_ROWS 和 SELECT FOUND_ROWS() 使用 LIMIT 对 UNION 查询(​​不是 UNION ALL)
【发布时间】:2012-03-06 02:35:12
【问题描述】:

我正在尝试计算如果没有设置全局 LIMIT 将返回的总行数。这是我的查询的样子:

SELECT SQL_CALC_FOUND_ROWS * FROM table1 WHERE [...]
UNION
SELECT * FROM table2 WHERE [...]
UNION
SELECT * FROM table3 WHERE [...]
UNION 
SELECT * FROM table4 WHERE [...]
LIMIT 0,30

然后我立即使用SELECT FOUND_ROWS() 查询。它总共返回 35 行,但它应该总共返回 400 行。知道如何在不使用 UNION ALL 的情况下计算行数吗?

【问题讨论】:

  • calc_found_rows 在每个查询的基础上工作,当您进行联合时会中断。这实际上是将两个查询合并为一个,您只会得到在联合中执行的最后一个查询的找到的行,而不是整个联合。
  • 那么有什么方法可以完成这种查询的行数吗?

标签: php mysql


【解决方案1】:

对所有联合选择使用临时表:

SELECT SQL_CALC_FOUND_ROWS * FROM 
(
  SELECT * FROM table1 WHERE [...]
  UNION
  SELECT * FROM table2 WHERE [...]
  UNION
  SELECT * FROM table3 WHERE [...]
  UNION 
  SELECT * FROM table4 WHERE [...]
)  temp_table
LIMIT 0,30

【讨论】:

  • 谢谢!答案非常简单,感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多