- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用嵌套的 MySQL 查询来获取用户帖子,当我将 SQL_CALC_FOUND_ROWS 放入子查询时,MySQL 返回错误:Incorrect usage/placement of 'SQL_CALC_FOUND_ROWS'
查询是:
SELECT inner_table.*
, users.username as last_username
, posts.date_added as last_date_added
, users.user_id as last_user_id
, posts.date_added as last_post_date
FROM (
SELECT SQL_CALC_FOUND_ROWS topics.topic_id
, topics.date_added
, topics.title
, topics.user_id
, MAX(posts.post_id) as last_post
, posts.user_id as post_user_id
, users.username
, topics.previews
, topics.fcat_id
, topics.is_important
, topics.is_locked
, topics.lastpost_time
, (SELECT COUNT(*) FROM posts WHERE posts.topic_id=topics.topic_id) as posts_cnt
FROM topics
LEFT JOIN users ON (users.user_id = topics.user_id)
LEFT JOIN posts ON (topics.topic_id = posts.topic_id)
WHERE topics.user_id = ".$this->session->getSession("user_data", "user_id")."
OR ".$this->session->getSession("user_data", "user_id")."
IN (
SELECT DISTINCT user_id
FROM posts
WHERE posts.topic_id = topics.topic_id
)
GROUP BY topics.topic_id
ORDER BY topics.lastpost_time DESC
LIMIT ".$limit * $page.", ".$limit."
) as inner_table
LEFT JOIN `posts` ON (posts.post_id=inner_table.last_post)
LEFT JOIN `users` ON (users.user_id=posts.user_id)
ORDER BY inner_table.lastpost_time DESC
最佳答案
我认为内部查询不允许使用 SQL_CALC_FOUND_ROWS
。
改为放入外部查询。
SELECT SQL_CALC_FOUND_ROWS inner_table.*
....
最后一行还有错误:
ORDER BY inner_table.lastpost_time DES
替换为:
ORDER BY inner_table.lastpost_time DESC
更新
为回应您的评论,我们提出了以下解决方法。
将内部选择输出到临时表中。
使用这样的代码:
/* do this once*/
CREATE TABLE `temp_table` LIKE SELECT topics.topic_id
, topics.date_added ....
/*do this for every query*/
DELETE FROM temp_table WHERE temp_table.topic_id <> 0;
INSERT INTO temp_table SELECT topics.topic_id
, topics.date_added
, topics.title
.... /*!! without the limit clause !!*/
SELECT count(*) as rowcount FROM temp_table;
/*then use the temp_table in place of the inner select*/
SELECT inner_table.*
, users.username as last_username
, posts.date_added as last_date_added
, users.user_id as last_user_id
, posts.date_added as last_post_date
FROM temp_table .....
LIMIT ....
使用 SQL_CALC_FOUND_ROWS 对 INSERT .. SELECT 也不起作用,但上面的代码是一种解决方法,您当然可以单独运行内部查询并在其上添加 LIMIT 1
尽可能快。
关于php - SQL_CALC_FOUND_ROWS 返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083322/
$query->select('SQL_CALC_FOUND_ROWS i.title,i.fulltext,i.shorttext'); $query->from('#__items
我们开始使用基于语句的复制,发现它破坏了 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS(),我正在寻找解决方法。 2007 年错误报告中的评论建议使用 SELECT SQL_CAL
所以我执行查询: SELECT SQL_CALC_FOUND_ROWS * FROM table l LIMIT 10, 20; 从表中返回 20 行,表中共有 553 行 然后我立即执行SELECT
我正在处理使用 SQL_CALC_FOUND_ROWS() 的分页代码,但是当我将每页的结果限制为小于总结果的数字时,“SELECT FOUND_ROWS() as total”将返回每页的元素数,并
如何获取特定查询的总行数并将查询结果限制为 10 行。例如。我有一个名为样本的表。它有 400 行。在运行像 where name = "%Sam%"这样的查询时,它返回 213 行。现在我只取前 1
我使用嵌套的 MySQL 查询来获取用户帖子,当我将 SQL_CALC_FOUND_ROWS 放入子查询时,MySQL 返回错误:Incorrect usage/placement of 'SQL_C
我发现 MySQL 返回一个 Incorrect usage/placement of 'SQL_CALC_FOUND_ROWS' 如果我将 SQL_CALC_FOUND_ROWS 放入子查询中会出错
所以我有一个表,其中有超过 500 万行。当我使用 SQL_CALC_FOUND_ROWS 时,查询永远挂起。当我把它拿出来时,查询在一秒钟内执行,限制为 25。我的问题是出于分页原因,是否有替代方法
我目前正在摸索如何使用准备好的语句实现 SQL_CALC_FOUND_ROWS。 我正在编写一个分页类,显然我想向查询添加 LIMIT,但也想知道总行数是多少。 这是相关类(class)的示例。 $q
我想删除此查询返回的记录: SELECT SQL_CALC_FOUND_ROWS tag, COUNT( tag ) AS count FROM _tags GROUP BY tag HAVING c
我正在做一个简单的 MySQL 查询来计算查询返回的行数,而没有 LIMIT 子句的影响。我将 Active Records 与 Codeigniter PHP 框架结合使用。 问题:使用SQL_CA
我正在尝试从数据库进行分页,到目前为止我发现如果您想使用限制,您应该使用 SQL_CALC_FOUND_ROWS。 但是,在 Java 中,我在理解如何调用它时遇到了一些问题。 我可以在一个 prep
我有一个查询,它获取一个结果,对其进行限制,然后对有限的结果进行排序。像这样的东西: (SELECT SQL_CALC_FOUND_ROWS * FROM table ... ORDER BY sc
我在 MySQL、InnoDB 中使用 SQL_CALC_FOUND_ROWS 时遇到一些问题。首先让我展示一个简单的数据库架构来解释正在发生的事情...... Database Schema 媒体表
我正在使用名为 feedwordpress 的 WordPress 插件为了在 WordPress 上运行一个类似行星的网站(参见 here )。 这个插件很棒,除了一件事之外 - 它每周左右都会占用
根据这个答案:here The use of SQL_CALC_FOUND_ROWS is not subject to race conditions. The result of the SELE
我在 centos 6 机器上使用 MySQL 5.6(mysql Ver 14.14 Distrib 5.6.44,用于使用 EditLine 包装器的 Linux (i686)) 我有一个包含多个
我正在尝试为查询全文索引表的结果添加分页。这是查询: 普通查询 SELECT *,MATCH(title) AGAINST ("+samsung +galaxy +s3" IN BOOLEAN MOD
我在使用 MYSQL 时遇到问题。 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 工作不正常。 问题: 第一次总返回1 第二次总数返回正确的3,500 名 MYSQL版本: m
这是我所知道的一种方式。请建议任何其他??? SELECT SQL_CALC_FOUND_ROWS * FROM Table; SELECT FOUND_ROWS(); 最佳答案 你可以使用(它会更快
我是一名优秀的程序员,十分优秀!