SQL_CALC_FOUND_ROWS с FOUND_ROWS всегда возвращает 1

select SQL_CALC_FOUND_ROWS, col1 , mytable.id from mytable group by col1;

select found_rows();

select found_rows() , col1  , mytable.id from mytable group by col1;

Этот запрос всегда приводит к 1 для найденных строк. Я использую php 7.1 и maria db 10.1.

Мой бэкэнд — laravel 5.5, и я делаю запрос DB :: raw на mysql.
Серверный сервер Apache Lamp.

Это ошибка или есть способ обойти это?

1

Решение

Решение 1:

Пожалуйста, проверьте версию MySQL. Эта ошибка существует в 5.6. * И устранена в версии 5.6.11. Убедитесь, что у вашего сервера версия отличается от [5.6. * < 5.6.11], чтобы сделать эту работу.

Это ошибка, опубликованная в mysql [не в mariadb] здесь:
http://bugs.mysql.com/bug.php?id=68458.

Если вы проверили версию mysql, проверьте приведенное ниже объяснение:

ПРИМЕЧАНИЕ. В ссылке на ошибку упоминается, что «MySQL-сервер, скомпилированный из« 5.6.11-log Source дистрибутива », все еще имеет эту ошибку».


Решение 2:

found_rows () и limit в одном запросе не приведут к общему количеству, но дадут счет для данных с ограничением.
Если в запросе выбора есть ограничение, вам придется использовать

 "select SQL_CALC_FOUND_ROWS, ....... limit x;"

и сразу же выполнить

"select found_rows();"

ИЛИ ЖЕ

Если в операторе выбора нет ограничений, вы можете выполнить

"select found_rows(), .......;"

Объяснение здесь: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-rows

1

Другие решения

Пример запроса кажется неправильным, так как вы должны иметь col1 быть частью выбранных полей

found_rows возвращает количество строк, найденных в предыдущем запросе.
Вы проверили результат первого запроса? сколько строк он возвращает?
Если он возвращает более 1 строки — это означает, что какой-то запрос выполняется между вашим запросом и выберите found_rows () в одном сеансе.
Мне не удалось воспроизвести эту проблему, но вы можете попробовать использовать сделка Вот.

С другой стороны —

Из запроса кажется, что вы пытаетесь получить отчетливый счет из таблицы, но по какой-то причине используете группу по.

ты пытался использовать

select count( disctinct col1) from mytable

Если это не работает для вас, ваш второй лучший вариант:

select count(1) from (<your query goes here>)
0

По вопросам рекламы [email protected]