1

我已将 Coldfusion 中的搜索移植到 MySQL 存储过程中。

实际搜索在网站上运行两次。一次获取记录数,第二次获取实际结果显示。

所以这两种 MySQL 语法在最后两行不同:

获取记录数:

 SELECT COUNT(*) ...
 GROUP BY a, b, c
 HAVING ... 

实际结果:

 SELECT "rows"...
 GROUP BY a, b, c
 HAVING ... 
 ORDER BY var1, var2
 LIMIT var_start, var_end

我的问题
由于我需要运行两次,有没有办法至少使用相同的存储过程=我可以将默认值添加到 order/grouping "ORDER BY 'nothing' LIMIT 'all'和 SELECT 的参数?

有点像 if 语句

WHERE 1
AND IF( var_x = '', '.', var_x = some_value )

感谢您的输入!

4

3 回答 3

1

如果它只是你想要的行数,你为什么不使用额外的参数来使用 count(*)。

SELECT count(a) as number_of_a, count(b) as number_of b ...
 GROUP BY a, b, c
 HAVING ... 
 ORDER BY var1, var2
 LIMIT var_start, var_end
于 2012-06-27T07:07:34.483 回答
1

你看过 sql_calc_found_rows 吗?

select sql_calc_found_rows mytable.* ... 
于 2012-06-27T07:10:39.650 回答
1

第一个查询是错误的——你不应该让 MySQL 引擎实际返回行,然后计算它们,你应该让 MySQL 直接计算它们:

SELECT COUNT(*)
FROM ...
GROUP BY a, b, c
HAVING ... 

试图在同一个 SQL 语句或存储过程中同时塞入记录计数和记录检索是一种不必要的优化。

于 2012-06-27T07:12:06.763 回答