Могу ли я использовать SQL_CALC_FOUND_ROWS с DISTINCT? - PullRequest
1 голос
/ 12 июля 2020

Здравствуйте и хорошо проводите время.

У меня такой запрос:

SELECT DISTINCT SQL_CALC_FOUND_ROWS SUBSTRING(color, 1, 3) as color FROM colors WHERE color LIKE '$color%' AND ottenok LIKE '$ottenok%';

А после:

SELECT FOUND_ROWS();

для получения всех записей, нравится не имеет DISTINCT. Но после SELECT FOUND_ROWS () я получаю только уникальные записи.

Не нашел в поисковых системах информации об использовании SQL_CALC_FOUND_ROWS с DISTINCT. Итак, я ищу совета, как мне отредактировать свой запрос, чтобы иметь возможность получать оба массива - уникальные и неуникальные.

ps, конечно, я знаю, что могу удалить «разные» из моих запрос и получить уникальный список ПОСЛЕ моего запроса sql, используя php функцию array_unique (), но это меня не устраивает, мне нужно решить эту задачу, используя только sql ...

1 Ответ

0 голосов
/ 12 июля 2020

Короче: found_rows() не даст вам счет без distinct, вам нужно подсчитывать эти записи отдельно.

Справочная информация: как mysql документация по found_rows () говорит (выделено мной):

Оператор SELECT может включать предложение LIMIT для ограничения количества строк, возвращаемых сервером клиенту. В некоторых случаях желательно знать, сколько строк оператор вернул бы без LIMIT , но без повторного выполнения оператора. Чтобы получить это количество строк, включите параметр SQL_CALC_FOUND_ROWS в оператор SELECT, а затем вызовите FOUND_ROWS () после этого:

Таким образом, этот метод просто позволяет вам получить счет, если к то же заявление. Модификатор Distinct применяется до limit, поэтому этот метод нельзя использовать для получения подсчета без отдельного.

Вы можете использовать отдельный запрос count(*) без модификатора distinct, чтобы получить желаемое количество .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...