SQL_CALC_FOUND_ROWS и found_rows() - MySQL

Узнай цену своей работы

Формулировка задачи:

Запрос не возвращает результат, т.е. условиям не соответствует ни одна строка, но found_rows() возвращает 1. Сам запрос:
SELECT
    SQL_CALC_FOUND_ROWS
    col1,
    col2,
    col3
FROM TABLE t
WHERE col3 = 99
    AND col1< curdate() - INTERVAL 1 DAY
    AND col2 NOT IN ('0' , '2', '3', '4', '5', '7', '8')
LIMIT 10;
Но если добавить 1 в вывод, то found_rows() возвращает 0.
SELECT
    SQL_CALC_FOUND_ROWS
    col1,
    col2,
    col3,
    1
FROM TABLE t
WHERE col3 = 99
    AND col1< curdate() - INTERVAL 1 DAY
    AND col2 NOT IN ('0' , '1')
LIMIT 10;
Как испаравить? Не хочу, чтобы выводилась 1.

Решение задачи: «SQL_CALC_FOUND_ROWS и found_rows()»

textual
Листинг программы
SELECT
    SQL_CALC_FOUND_ROWS
    col1,
    col2,
    col3,
    1
FROM TABLE t
WHERE col3 = 99
    AND col1< curdate() - INTERVAL 1 DAY
    AND col2 NOT IN ('0' , '1')
LIMIT 10;

Объяснение кода листинга программы

В данном коде выполняется SQL-запрос, который выбирает данные из таблицы TABLE с несколькими условиями:

  1. col3 = 99 - выбираются только строки, где значение столбца col3 равно 99.
  2. col1< curdate() - INTERVAL 1 DAY - выбираются только строки, где значение столбца col1 меньше текущей даты на один день.
  3. col2 NOT IN ('0' , '1') - выбираются только строки, где значение столбца col2 не равно 0 или 1. Затем, с помощью LIMIT 10, выбираются первые 10 строк. Кроме того, в начале запроса указано SQL_CALC_FOUND_ROWS, что означает, что функция found_rows() будет возвращать общее количество найденных строк, а не количество выбранных строк. Таким образом, результат запроса будет содержать 11 столбцов: col1, col2, col3, found_rows(10).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5