2011-02-25 56 views
1

我做了以下MySQL的FOUND_ROWS及总行

n = 10 
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name 
WHERE id > 100 LIMIT n, 20; 
SELECT FOUND_ROWS(); 

然而,正由用户设定。有没有办法知道n不会遍历整个行数而不必运行查询两次?

回答

0

我不明白你怎么可能完成自己的目标,而无需运行两个查询。 您可以运行不同的查询数,将返回结果的数量,然后检查对用户的价值,这个数字。

+0

是的,这就是我在想... – JeffTun 2011-02-25 17:42:38

0

一般这里很少SQL知识,但我会尽力协助。

如果它的边界上会发生什么?你只选择最后的20个?我不确定。从什么样子上的MySQL参考,LIMIT X,Y是指在结果返回第x值开始并返回y记录(x和遵循y-1记录)。所以看起来你需要检查并确保n不大于你的计数 - 20.

DECLARE @blah INT; 

IF (n <= (SELECT Count(*) FROM tbl_name) - 20) THEN SET @blah = n; 
ELSE SET @blah = (SELECT Count(*) FROM tbl_name) - 20; 


SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT @blah, 20; 
    SELECT FOUND_ROWS(); 

END IF