#php #mysql #sql
#php #mysql #sql
Вопрос:
В настоящее время я использую это для запроса значения следующего месяца:
if($stmt = $link->prepare("
SELECT SUM(prov) as sum
FROM tbl
WHERE MONTH(transfer) = MONTH(CURRENT_DATE()) 1
AND YEAR(transfer) = YEAR(CURRENT_DATE())
")) {
Проблема в том, что он не дает мне значения с января 2021 года. Я попробовал приведенный ниже код, но значение по-прежнему не возвращается:
if($stmt = $link->prepare("
SELECT SUM(prov) as sum
FROM tbl
WHERE MONTH(transfer) = MONTH(CURRENT_DATE()) 1
AND YEAR(transfer) = YEAR(CURRENT_DATE()) 1
")) {
Пример значения передачи: 2021-01-01
.
Комментарии:
1. Пометьте свой вопрос базой данных, которую вы используете.
2. @GordonLinoff Готово! phpMyAdmin.
3. Вы можете легко понять, в чем проблема, если полностью удалите свое
WHERE
предложение и поместите все эти вычисления вSELECT
список. Таким образом, вы можете наблюдать вычисленные значения и определять, как они должны влиять на результат. Затем вы обнаружите, чтоMONTH(CURRENT_DATE()) 1
возвращает 13, поэтому такого месяца не существует. Такжеmonth = month 1 and year = year 1
фактически не в следующем месяце, это следующий месяц следующего года, кроме декабря.
Ответ №1:
Вы можете использовать функции date / datetime:
SELECT SUM(prov) as sum
FROM tbl
WHERE transfer >= DATE(CONCAT_WS('-', YEAR(NOW()), MONTH(NOW()), 1 ) INTERVAL 1 MONTH AND
transfer < DATE(CONCAT_WS('-', YEAR(NOW()), MONTH(NOW()), 1 ) INTERVAL 2 MONTH;
Этот запрос сформулирован так, что он может использовать индекс on transfer
.