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:
Пожалуйста, проверьте версию 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
Пример запроса кажется неправильным, так как вы должны иметь col1 быть частью выбранных полей
found_rows возвращает количество строк, найденных в предыдущем запросе.
Вы проверили результат первого запроса? сколько строк он возвращает?
Если он возвращает более 1 строки — это означает, что какой-то запрос выполняется между вашим запросом и выберите found_rows () в одном сеансе.
Мне не удалось воспроизвести эту проблему, но вы можете попробовать использовать сделка Вот.
С другой стороны —
Из запроса кажется, что вы пытаетесь получить отчетливый счет из таблицы, но по какой-то причине используете группу по.
ты пытался использовать
select count( disctinct col1) from mytable
Если это не работает для вас, ваш второй лучший вариант:
select count(1) from (<your query goes here>)