当我只想在搜索查询中获取结果数时,MySQL是否接受ORDER BY“nothing”限制“all”?
问题描述:
我已将Coldfusion的搜索移植到MySQL存储过程中。当我只想在搜索查询中获取结果数时,MySQL是否接受ORDER BY“nothing”限制“all”?
实际搜索在网站上运行两次。一次获取记录数,第二次获得实际结果显示。
因此,无论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
我的问题:
因为我需要运行两次,有没有办法使用相同的存储过程=我可以添加defau lt值“ORDER BY'nothing'LIMIT'全部',以及一个参数给SELECT?
有点像if语句
WHERE 1
AND IF(var_x = '', '.', var_x = some_value)
感谢输入!
答
第一个查询是错误的 - 你不应该问MySQL的发动机实际返回的行,再算上他们,你应该问的MySQL直接算来:
SELECT COUNT(*)
FROM ...
GROUP BY a, b, c
HAVING ...
尝试shoe-horn都记录了count和记录检索在同一个SQL语句或存储过程中是不必要的优化。
我在第一个查询中选择了count(*)...所以查询在SELECT和ORDER/LIMIT中有所不同。那么我应该做两个存储过滤器吗? – frequent
是的,你应该做两个存储过程。 [那么我注意到,你最初在问题中所说的话并不完全正确 - 查询_does_在第一行中也有所不同......] – Alnitak
是的。我现在正在编辑这个问题。好。两个存储过滤器然后:-) – frequent