2015-06-18 10 views
1

Я заинтересован в сборе данных за последний месяц в базе данных с MySQLi.MySQLi "CURRENT_MONTH_BEGINNING" ... есть ли способ получить это?

Но с использованием INTERVAL 1 МЕСЯЦА каждый месяц перекрывается другой, так есть способ сообщить функции проверить мой текущий месяц, начать с первого дня и собрать все данные из указанного месяца?

Что-то вроде:

SELECT count(DISTINCT ip) AS visitor_ip FROM visitor_list 
    WHERE visited_date > (INTERVAL CURRENT_MONTH_BEGINNING) 

ответ

2

Вы можете просто использовать текущий год и месяц, и 01, как день:

SELECT count(DISTINCT ip) AS visitor_ip 
FROM visitor_list 
WHERE visited_date > CONCAT(DATE_FORMAT(NOW(),'%Y%m'), '01') 

Это имеет то преимущество, что по-прежнему будет использоваться любой индекс visited_date правильно.

+2

Почему 'CONCAT' и не только' DATE_FORMAT (NOW (), '% Y-% м-01') '? –

+0

Это тоже хорошо: я привык работать с базами данных, которые не имеют такого гибкого форматирования даты, поэтому это не сразу пришло в голову. – TobyLL

+0

Ну, это было быстро и удивительно. Я благодарю вас обоих, я искал, но ничего не нашел, скорее всего, потому, что искал неправильную формулировку. Еще раз спасибо! – balslev

0

Прежде всего, необходимо произвести текущую дату месяца, начиная с PHP как это:

$monthStartDate = date('Y-m').'-01'; 

Тогда ваш запрос будет:

$sql = "SELECT count(DISTINCT ip) AS visitor_ip FROM visitor_list WHERE visited_date > DATE_SUB(now(), interval (datediff(now(), '".$monthStartDate."')) day)"; 

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

  • Нет связанных вопросов^_^