LINUX.ORG.RU

FOUND_ROWS выдает неправильный результат

 


0

1
SELECT SQL_CALC_FOUND_ROWS t1.user_id, t1.friend_id, ta2.username as username, ta3.username as friend_name
FROM t1 
INNER JOIN another_db.t2 ta2 ON ta2.id = t1.user_id 
INNER JOIN another_db.t2 ta3 ON ta3.id = t1.friend_id
ORDER BY ta2.username DESC LIMIT 45, 100;

SELECT FOUND_ROWS();

- выдает 428, что есть правильно.

SELECT SQL_CALC_FOUND_ROWS t1.user_id, t1.friend_id, ta2.username as username, ta3.username as friend_name
FROM t1 
INNER JOIN another_db.t2 ta2 ON ta2.id = t1.user_id 
INNER JOIN another_db.t2 ta3 ON ta3.id = t1.friend_id
ORDER BY ta2.username DESC LIMIT 46, 100;

SELECT FOUND_ROWS();

- выдает 146 О_о, что неправильно.

Заметил что если делать сортировку по полям из таблицы t1 такой проблемы не возникает. Также проблема решается если сделать

GROUP BY t1.user_id, t1.friend_id

Вопрос: почему так? Я чего-то не понимаю в этой жизни?

★☆☆☆

Последнее исправление: drull (всего исправлений: 1)

Даже так:

If the statement includes a LIMIT clause, FOUND_ROWS() returns the number of rows up to the limit. For example, FOUND_ROWS() returns 10 or 60, respectively, if the statement includes LIMIT 10 or LIMIT 50, 10.

ziemin ★★
()
Ответ на: комментарий от ziemin

Тут сначала идет «In the absence of the SQL_CALC_FOUND_ROWS option in the most recent successful SELECT statement...»

drull ★☆☆☆
() автор топика
Ответ на: комментарий от ziemin

For a SELECT with a LIMIT clause, the number of rows that would be returned were there no LIMIT clause

Вот именно. При «limit 45,100» результат правильный, а при «limit 46,100» - неправильный.

drull ★☆☆☆
() автор топика
Ответ на: комментарий от ziemin

А вот совсем свежая.

Noted in 5.6.12, 5.7.2 changelogs.

FOUND_ROWS() could return an incorrect value if the preceding query
used filesort.

ziemin ★★
()

Интересно, есть ли бага в MariaDB. Один раз сталкивался с багой, которая не была пофикшена в MySQL, но была пофикшена в MariaDB.

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.