我在我们的系统中使用了多个不同的查询,在这些查询中,我们希望获取分页内容的“总”记录。
我去过的所有地方都遵循这样的结构-
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行。
我不知道这里发生了什么,一片空白。
需要帮助。
谢谢
发布于 2019-07-13 05:41:51
您必须使用相同的连接才能获得可靠的结果,而不仅仅是池中的结果。
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();
});
});
});发布于 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语句的概率也会增加
https://stackoverflow.com/questions/48753708
复制相似问题