2016-01-03 1 views
1

У меня был пользовательский плагин wordpress, который запускает отчет для записей в базе данных за предыдущие несколько месяцев, и он работал весь год, но теперь, когда новый год произошло, он не показывает результатов, потому что он отсчитывает несколько месяцев, но затем сохраняет его на 2016 год.Подсчет базы данных за предыдущий месяц в течение нового года с помощью PHP SQL

Например, я загружаю страницу 1 января 2016 года, и она показывает результаты за декабрь 2016 года, а не 2015 год, когда я я использую следующий метод для получения данных за прошлый месяц.

$today = date("Y-m-d H:i:s"); 
$month_current_start = date("Y-m-")."1 0:0:0"; 
$currentmonth = date("m"); 
$lastmonthnum = $currentmonth - 1; 
$last_month_start = date("Y-").$lastmonthnum."-1 0:0:0"; 
$last_month_end = date("Y-").$lastmonthnum."-31 0:0:0"; 

так, то у меня есть SQL, который говорит что-то вроде

$var = $wpdb->get_var("SELECT Count(*) FROM `table` WHERE table.timestamp BETWEEN '$last_month_start' AND '$last_month_end' AND table.amount = 1200"); 

Любые советы о том, как исправить этот запрос так, что он знает, что в прошлом месяце 2015? не

Я не профессионал, поэтому я хотел бы начинающего стиль помощь :-)

я могу заставить его работать вручную, но я хотел бы код, чтобы работать в течение следующих нескольких месяцев автоматически (так как фактические плагин вычисляет последние четыре месяца).

+0

Вы используете mysql или sql-server? – davejal

ответ

1

Самый простой способ - преобразовать прошлый месяц в метку времени и использовать это для создания формата, который у вас есть в вашей БД. Пример, основанный на том, что вы до сих пор был бы:

$today = date("Y-m-d H:i:s"); 
$month_current_start = date("Y-m-")."1 0:0:0"; 
$ltime = strtotime("-1 month"); 
$last_month_start = date("Y-m",$ltime)."-1 0:0:0"; 
$last_month_end = date("Y-m",$ltime)."-31 0:0:0"; 

Что это делает, он делает метку времени для 1 месяц назад от момента, когда она вызывается в строке $ltime = strtotime("-1 month"); Оттуда, он делает формат для первый день и последний день месяца (при условии, что всегда есть 31 день курса ^^) на основе временной метки, которую вы будете использовать для предоставления года и месяца.

PHP Sandbox с примером кода и выводится, если вы хотите поиграть с тем, как работает strtotime.

0

В mysql у вас есть возможность использовать year_month, см. this для справки.

  1. Получить текущий год и месяц, используя код
  2. обновления ваш запрос соответственно

или вы можете иметь свой сервер SQL сделать всю работу за вас, используя date_add function

Обновите свой вопрос с используемым сервером db, затем я могу написать новый запрос для вас.

+0

Почему чрезмерно усложнять его, переместив логику, которая уже существует в PHP, вместо SQL-запроса? – Jon

+0

Если у db уже есть функция для этого, вы можете упростить код, используя уже имеющиеся функции. – davejal

+0

Логика уже находится в PHP, и функции существуют, чтобы справиться с ней там. Они попросили помощь в стиле начинающего, и вы хотите предоставить чрезмерно сложный SQL-запрос, с которым они могут не знать, как бороться, а не работать с тем, что у них есть? – Jon

Смежные вопросы