2015-11-27 2 views
1

У меня есть БД с текстовым столбцом, который будет хранить дату и время как DD/MM/YYYY HH: MM: SS (пример: 27-11-2015 17:01:53) ,Mysql GROUP BY DATE из текстового столбца

Теперь я хотел бы сделать некоторую статистику с PHP, но я просто не могу решить проблему с датами.

Я хотел был бы сосчитать все результаты, имеющие тот же день (DD/MM/YYYY), несмотря на созданный час.

Я уже пробовал много решений, но никто не работает.

По лучшей попытке был этот один, но дает мне NULL в качестве даты:

SELECT STR_TO_DATE(DATECOLUMN, '%d/%m/%Y'), COUNT(*) 
FROM TABLE 
GROUP BY STR_TO_DATE(DATECOLUMN, '%d/%m/%Y') 

Я хотел бы сделать поиск в интервале на основе слишком, и я хотел бы некоторую помощь в исканиях для интервала дат этого так как «нормальный» способ не работает. Использование приведенного ниже кода не будет работать, чтобы делать интервалы.

WHERE DATE(DATECOLUM) >= DATE(NOW()) - INTERVAL 7 DAY 

Может ли кто-нибудь помочь мне попытаться решить эту проблему? Благодаря!

+5

Исправьте столбец, чтобы сохранить даты в правильном формате. Не используйте строки для хранения значений, когда база данных знает правильный способ их хранения. –

+0

Код уже выполнен. Мне действительно нужно изменить свой код в кучу файлов? На самом деле нет никакого способа сделать это? – Tiago

+0

С вашей стороны нет обязательств по использованию СУБД, но, видя, что вы хотите использовать один ... – Strawberry

ответ

1

вы можете попробовать:

SELECT date_format(str_to_date(DATECOLUMN, '%d/%m/%Y'), '%d/%m/%Y') AS MyDate, COUNT(*) 
FROM TABLE 
GROUP BY MyDate 

Для интервала и группы вы можете попробовать это:

SELECT COUNT(*), MyDate 
FROM TABLE, (
    SELECT date_format(str_to_date(DATECOLUMN, '%d/%m/%Y'), '%d/%m/%Y') AS MyDate 
    FROM TABLE) Tmp 
WHERE date_format(str_to_date(MyDate, '%d/%m/%Y'), '%Y-%m-%d') >= NOW() - INTERVAL 7 DAY 
GROUP BY MyDate 
+0

И можно создать интервал, чтобы он искал последние 7 дней, например, с новой датой (DD/MM/YYYY)? – Tiago

+0

@Tiago Я добавил еще один запрос – genespos

+0

Я внес некоторые изменения из-за моей информации о данных, и это работает как шарм! Благодаря! – Tiago

0

Ну,

Я думаю, я нашел решение, и это работает очень хорошо. Для тех, что будет нужно в будущем:

SELECT DATE_FORMAT(STR_TO_DATE(DATEC_OLUMN , "%d-%m-%Y %H:%i:%S"), "%d/%m/%y") AS date, 
     COUNT(*) 
FROM TABLE_NAME 
GROUP BY DATE_FORMAT(STR_TO_DATE(DATE_COLUMN, "%d-%m-%Y %H:%i:%S"), "%d/%m/%y") 

Код выше превратит мою строку текста столбца в DD/MM/YYYY HH: MM: SS для DD/MM/YYYY и сгруппируем его и подсчет она по дате