MySQL - 考虑LIMIT,同时选择行数和其他数据

时间:2011-06-18 02:35:50

标签: mysql

所以我有一个MySQL查询,它是根据传递给我的php脚本的参数动态创建的。它工作得很好,但是,我希望能够获取 返回before applying the LIMIT statement的行数。在我看来,这不能在一个查询中完成,但有很多关于MySQL我不知道如果可以的话,它不会让我感到惊讶。

我环顾四周,发现COUNT(*)mysql_num_rows()要快得多,但就我所知,我不能在我的情况下使用,因为它们只会受到多少人的限制我在LIMIT中指定的结果,通常为30.此外,我宁愿不提交不包含LIMIT的查询,只是为了获取将<的数字或行< / em>返回然后立即应用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 BYLIMIT之外的所有内容)从该查询到SELECT COUNT(*)语句,运行该语句,然后运行实际查询以获取所有数据。这是最有效的方式还是有人有更好的主意?我很想听听所有可能的解决方案,谢谢! :)

1 个答案:

答案 0 :(得分:2)

我认为你要找的是CALC_FOUND_ROWS

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

SELECT FOUND_ROWS();

但它仍然是两个问题。