2011-06-18 68 views
1

的同时无选择行数以及其他数据所以我有一个MySQL查询是根据传递给我的php脚本的参数动态创建的。这是伟大的工作,但是,我想能够获取它的行数返回before applying the LIMIT statement。在我看来,这似乎无法在一个查询中完成,但有太多关于MySQL我不知道,如果可以的话,我丝毫不会感到惊讶。MySQL - 在考虑LIMIT

我环顾四周,并发现COUNT(*)mysql_num_rows()快得多,但据我所知,我也不能在我的情况下使用,因为他们仅仅是被限制我有多少导致了我的LIMIT规定,通常是30.此外,我宁愿不提交不包含LIMIT的查询,只是为了获得返回的数字或行,然后立即应用LIMIT并提交相同的查询。

下面是一个简单的查询:

SELECT DISTINCT w.id, w.resolution, w.views, w.colors, w.favorites 
FROM wallpapers AS w 
LEFT JOIN (tagmap AS tm, tags AS t) 
ON (
    w.id = tm.wallpaper_id 
    AND 
    tm.tag_id = t.tag_id 
) WHERE w.ratio = 
    (SELECT ratio FROM wallpapers WHERE resolution = '1920 x 1080' LIMIT 1) 
AND (
    t.tag 
    IN (
     'portal' 
    ) 
) 
AND (w.verify = 2) 
ORDER BY w.id DESC LIMIT 30 

我已经清理,最多花了很多时间优化它,所以希望它很容易让你阅读,但也随时到别的提什么你发现时髦的代码,可以帮助加速这一过程^^

回到问题,一个办法,我看这样做会坚持的条件句(一切,但SELECTJOINGROUP BY,和LIMIT基本上)从查询到SELECT COUNT(*)语句,运行该语句,然后r取消所有数据的实际查询。这是最有效的方式,还是有人有更好的主意?我很想听听所有可能的解决方案,谢谢! :)

回答

2

我想你在找什么是CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name 
WHERE id > 100 LIMIT 10; 

SELECT FOUND_ROWS(); 

它仍然是,虽然两个查询。

+0

'SELECT语句可能包含一个LIMIT子句来限制服务器返回给客户端的行数。在某些情况下,最好知道该语句在没有LIMIT的情况下会返回多少行,但不需要再次运行语句,我认为您碰到了头部。谢谢你,先生! –

+0

我是否用'SQL_CALC_FOUND_ROWS *'替换了我正在使用的'SELECT''?这给了我加入的所有表的所有数据,我宁愿不这样做,那么我该如何指定要返回的数据?另外,我在phpMyAdmin中运行这个,当我添加'SELECT FOUND_ROWS();'它已经列出,但只是说'你的SQL查询已成功执行',没有任何返回。你知道我做错了什么吗? –

+0

无视我的问题,我修好了,再次感谢 –