MySQL-同时考虑限制LIMIT来选择行数和其他数据

问题描述

| 因此,我有一个基于传递给我的php脚本的参数正在动态创建的“ 0”查询。它的运行效果很好,但是,我希望能够获取返回
before applying the LIMIT statement
的行数。在我看来,这不可能在一个查询中完成,但是关于ѭ0的内容太多了,我不知道如果可以的话,它不会丝毫让我感到惊讶。 我环顾四周,发现
COUNT(*)
mysql_num_rows()
快得多,但据我所知,我不能使用这两种方法,因为它们只会受到我在
LIMIT
中指定的结果数的限制,即通常是30。此外,我不想提交不包含ѭ5的查询,只是为了获取返回的数字或行,然后立即应用ѭ5并提交相同的查询。 这是一个示例查询:
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
我已经清理了这个代码,并花了很多时间对其进行优化,因此希望您可以轻松阅读,但也可以随意提及代码中发现的任何时髦内容,以帮助加快速度^^ 回到问题,我看到的一种方法是将查询中的条件条件(除了
SELECT
JOIN
GROUP BY
和AND5ѭ之外的所有内容)粘贴到
SELECT COUNT(*)
语句中,运行该语句,然后将实际查询运行到获取所有数据。这是最有效的方法还是有人有更好的主意?我希望听到所有可能的解决方案,谢谢! :)     

解决方法

        我认为您正在寻找的是CALC_FOUND_ROWS
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
WHERE id > 100 LIMIT 10;

SELECT FOUND_ROWS();
虽然它仍然是两个查询。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...