首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOUND_ROWS()在mySQL中的错误结果

FOUND_ROWS()在mySQL中的错误结果
EN

Stack Overflow用户
提问于 2011-05-10 19:35:27
回答 3查看 4.4K关注 0票数 3

我一共有6排。当我执行一个查询(例如SELECT * from表)时,我有

retrieved

  • LIMIT 3 => FOUND_ROWS()给出3 => 3行为retrieved

  • LIMIT 1,3 => FOUND_ROWS()给出4 => 3行为retrieved

  • LIMIT 2,3 => FOUND_ROWS()给出5 => 3行为retrieved

  • LIMIT 3,3 => => 3行为retrieved

  • LIMIT 4,3 => ()给出6#en22 20#2行被检索

知道是什么原因导致了这种奇怪的行为吗?

SQL查询

代码语言:javascript
复制
SELECT `places`.*, `category`.*, COUNT(places_reviews.place_id) AS num_reviews, (places_popularity.rating_1 + 2*places_popularity.rating_2 + 3*places_popularity.rating_3 + 4*places_popularity.rating_4 + 5*places_popularity.rating_5)/(places_popularity.rating_1 + places_popularity.rating_2 + places_popularity.rating_3 + places_popularity.rating_4 + places_popularity.rating_5) AS average_rating, FOUND_ROWS() AS num_rows FROM (`places`) JOIN `category` ON `places`.`category_id` = `category`.`category_id` LEFT JOIN `places_reviews` ON `places_reviews`.`place_id` = `places`.`id` LEFT JOIN `places_popularity` ON `places_popularity`.`place_id` = `places`.`id` WHERE `places`.`category_id` = 1 AND `places`.`name` LIKE '%%' GROUP BY `places`.`id` ORDER BY `id` desc LIMIT 3

或块中的:

代码语言:javascript
复制
SELECT `places`.*, `category`.*, 
COUNT(places_reviews.place_id) AS num_reviews, 
(places_popularity.rating_1 + 2*places_popularity.rating_2 + 3*places_popularity.rating_3 + 4*places_popularity.rating_4 + 5*places_popularity.rating_5)/(places_popularity.rating_1 + places_popularity.rating_2 + places_popularity.rating_3 + places_popularity.rating_4 + places_popularity.rating_5) AS average_rating, FOUND_ROWS() AS num_rows FROM (`places`) 
JOIN `category` ON `places`.`category_id` = `category`.`category_id` 
LEFT JOIN `places_reviews` ON `places_reviews`.`place_id` = `places`.`id` 
LEFT JOIN `places_popularity` ON `places_popularity`.`place_id` = `places`.`id` 
WHERE `places`.`category_id` = 1 
    AND `places`.`name` LIKE '%%' 
GROUP BY `places`.`id` 
ORDER BY `id` desc LIMIT 3
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-10 19:41:52

编辑:

这就是你要找的东西:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

所以在您的查询中:

选择sql_calc_found_rows .

票数 5
EN

Stack Overflow用户

发布于 2011-05-10 19:50:41

试着这样做

代码语言:javascript
复制
SELECT sql_calc_found_rows `places`.*, `category`.*, 
COUNT(places_reviews.place_id) AS num_reviews, 
(places_popularity.rating_1 + 2*places_popularity.rating_2 + 3*places_popularity.rating_3 + 4*places_popularity.rating_4 + 5*places_popularity.rating_5)/(places_popularity.rating_1 + places_popularity.rating_2 + places_popularity.rating_3 + places_popularity.rating_4 + places_popularity.rating_5) AS average_rating FROM (`places`) 
JOIN `category` ON `places`.`category_id` = `category`.`category_id` 
LEFT JOIN `places_reviews` ON `places_reviews`.`place_id` = `places`.`id` 
LEFT JOIN `places_popularity` ON `places_popularity`.`place_id` = `places`.`id` 
WHERE `places`.`category_id` = 1 
    AND `places`.`name` LIKE '%%' 
GROUP BY `places`.`id` 
ORDER BY `id` desc LIMIT 3;

select found_rows();
票数 2
EN

Stack Overflow用户

发布于 2015-05-19 10:54:07

最快的解决方案是按以下方式对实际查询进行子查询:

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS * FROM (SELECT whatever FROM whatever WHERE whatever LIMIT whatever) ax; 
select FOUND_ROWS();

现在你将得到正确的结果。主要原因是SQL_CALC_FOUND_ROWS主要跟踪已找到的行(即没有LIMITS),没有返回行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5955471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档