Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет. Есть у меня следующий запрос:
SELECT DISTINCT SQL_CALC_FOUND_ROWS SUBSTRING(color, 1, 5) as color FROM products WHERE color LIKE '$color%' AND type LIKE '$type%';
И дальше за ним следует:
SELECT FOUND_ROWS();
с той целью, чтобы в итоге получить то количество записей, как если бы в запросе отсутствовало слово DISTINCT. Однако, после SELECT FOUND_ROWS() я получаю снова только список уникальных записей, а не все записи, которые удовлетворяют WHERE условию.
При поиске в ПС не нашел точной информации, работает ли вообще SQL_CALC_FOUND_ROWS рядом с DISTINCT. Поэтому хочу получить подсказку - как поправить/изменить мой запрос, чтобы получить в итоге как уникализированный список, так и неуникализированный список.
Я держу в уме, само собой, что можно убрать distinct из запроса и выполнить уникализацию уже после запроса (средствами php), например, с помощью функции array_unique(), но по некоторым причинам данный способ мне не подходит, хочу решить эту задачу именно ресурсами sql
Неактивен
Alex Krochet написал:
Всем привет. Есть у меня следующий запрос:
SELECT DISTINCT SQL_CALC_FOUND_ROWS SUBSTRING(color, 1, 5) as color FROM products WHERE color LIKE '$color%' AND type LIKE '$type%';
И дальше за ним следует:
SELECT FOUND_ROWS();
с той целью, чтобы в итоге получить то количество записей, как если бы в запросе отсутствовало слово DISTINCT. Однако, после SELECT FOUND_ROWS() я получаю снова только список уникальных записей, а не все записи, которые удовлетворяют WHERE условию.
Так и должно быть. SQL_CALC_FOUND_ROWS запоминает кол-во записей, возвращаемых запросом как если бы не было LIMIT. Без LIMIT его нет смысла использовать.
С LIMIT тоже нужно использовать с осторожностью, см https://sqlinfo.ru/forum/viewtopic.php?id=6876
Ваша задача решается в 2 запроса:
Неактивен