首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql多用户使用diff diff SQL_CALC_FOUND_ROWS导致diff diff总行计数

Mysql多用户使用diff diff SQL_CALC_FOUND_ROWS导致diff diff总行计数
EN

Stack Overflow用户
提问于 2018-02-13 03:05:16
回答 2查看 136关注 0票数 0

我在我们的系统中使用了多个不同的查询,在这些查询中,我们希望获取分页内容的“总”记录。

我去过的所有地方都遵循这样的结构-

代码语言:javascript
复制
var query1 = "select SQL_CALC_FOUND_ROWS ...."
sql.query(query1, [], function (error, results, fields) {
 var _qry2 = "SELECT FOUND_ROWS() as total;"
                    sql.query(_qry2, [], function (error2, results2, fields2) {
 });
});

我在这里面临的问题是,当1-10个用户使用我的所有系统时,它会给出所有API的正确“总数”计数。

但是当不是。如果用户数量增加到超过10比如20,那么“总”计数就会随着每个用户使用所有API中的一个而不断变化。

假设"total“行在245行,根据其他查询的"total”计数,有时是18行,有时是300行,有时是245行。

我不知道这里发生了什么,一片空白。

需要帮助。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-07-13 05:41:51

您必须使用相同的连接才能获得可靠的结果,而不仅仅是池中的结果。

代码语言:javascript
复制
sql.getConnection(function(err, conn) {
    if (err) throw err;
    conn.query("SELECT SQL_CALC_FOUND_ROWS * FROM table", [], function(err, result) {
        if (err) {
            conn.release(); // give connection back to the pool
            throw err;
        }
        conn.query("SELECT FOUND_ROWS() as total", [], function(err, result) {
            if (err) {
                conn.release(); // give connection back to the pool
                throw err;
            }
            let total = result[0].total;
            conn.release();
        });
    });
});
票数 1
EN

Stack Overflow用户

发布于 2018-12-06 00:53:02

你有一个并发问题。FOUND_ROWS()返回上次执行的select语句返回的行数。

https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows

可通过FOUND_ROWS()获得的行数是暂时的,不能超过SELECT SQL_CALC_FOUND_ROWS语句后面的语句。

随着用户数量的增加,在初始SELECT和执行FOUND_ROWS()之间执行另一条SELECT语句的概率也会增加

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

https://stackoverflow.com/questions/48753708

复制
相关文章

相似问题

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