问题描述
|
因此,我有一个基于传递给我的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();
虽然它仍然是两个查询。