2012-05-08 5 views
0

У меня есть таблица (журналы), в которой я держу журналы того, что происходит на моем сервере, и я хотел создать функцию, которая сортировала бы полученные результаты. Чтобы объяснить лучше:MySQL PHP - результаты группы по дням/месяцам/годам?

Мой запрос.

SELECT * 
    FROM Logs 
    WHERE username = '$user' 
    ORDER BY cur_timestamp DESC 

(cur_timestamp это поле в моем журнале таблицы, метка вставки записи)
($ пользователю это имя пользователя (устанавливается ранее))

Это возвращает массив, как обычно, из всех записей в порядке убывания. Теперь, что я хочу сделать, это запросить базу данных и заставить ее возвращать только записи, которые находятся в течение определенного дня или месяца и т. Д., Например, если пользователь выбирает месяц, я хочу, чтобы он возвращал все записи в только в этом месяце.

Я пытался исследовать, что делать, и кажется, что мне кажется, что я использую технику GROUP BY, за исключением того, что это возвращает только один результат. Я не совсем уверен. Любая помощь будет оценена! Благодаря!

+0

Каков тип 'cur_timestamp'? – kapa

+0

Это тип даты, например: 2012-05-07 10:35:10 – 8guadalupe8

ответ

3

Пример (Журналы в Januar 2012):

SELECT * 
FROM Logs 
WHERE username = '$user' 
and cur_timestamp between '2012-01-01' and '2012-01-31' 
ORDER BY cur_timestamp DESC 

Только сегодня:

SELECT * 
FROM Logs 
WHERE username = '$user' 
and date(cur_timestamp) = curdate() 
ORDER BY cur_timestamp DESC 

Если вы хотите определенное время из прошлого сезам теперь вы можете использовать DATEADD.

Пример (Журналы последних 30 дней):

SELECT * 
FROM Logs 
WHERE username = '$user' 
and date(cur_timestamp) >= DATE_ADD(curdate(), INTERVAL -30 DAY) 
ORDER BY cur_timestamp DESC 
+0

Это сработало, что было здорово! благодаря! Кроме того, есть ли способ легко вернуть его, чтобы вернуть «последний» месяц или только «сегодня»? – 8guadalupe8

+0

Конечно, используйте 'cur_timestamp = CURDATE()' :) Дополнительные функции см. В документах MySQL по функциям даты и времени, [здесь] (http://dev.mysql.com/doc/refman/5.5/en/date -and-time-functions.html # function_curdate) – Daan

+0

Вы можете использовать функцию php mktime() для получения метки времени в прошлом месяце и использовать этот метод awnser для использования этой метки времени и получения результатов. – MakuraYami

0

Если я правильно понимаю вашу проблему правильно, я не думаю, что вам нужно GROUP BY, а просто добавить WHERE, чтобы выбрать все журналы в определенном временной диапазон

SELECT * 
FROM Logs 
WHERE username = '$user' 
AND cur_timestamp > '2010-01-01' 
AND cur_timestamp < '2012-12-01' 
ORDER BY cur_timestamp DESC 

Единственное, что вам нужно сделать - это настроить диапазоны дат. Нет необходимости в каких-либо GROUP BY

+0

Спасибо большое, это очень помогло: D – 8guadalupe8

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