2014-10-26 2 views
1

Я пытаюсь получить записи БД на стол, однако я борюсь, потому что я должен разделить их на будний день и в каждый будний день они могут быть утром, днем, ночью или весь день. enter image description hereПоложите результаты на таблицу, деленные на все дни недели

На картинке выше показано, как я хочу отображать информацию. Для уточнения

Пункт 1 - будний день (понедельник - 27/10/2014) и т. Д.

Затем во второй колонке (Manhã = Morning) Я хочу показать все, что было вставлено этим утром.

(К примеру:. В понедельник утром, может иметь 4 записи, но в afternook он может иметь только 1 и 0 в сутки)

Выше этой таблицы результат на WebGrid за каждый день неделя. Что я сделал было:

"SELECT DISTINCT dataOcorrencia FROM relatoriosSemanais WHERE semana= '43'" 

и поставить его на WebGrid, и это заставляет меня все дни недели с недели 43, да и неделя будет динамичным.

Но теперь я не знаю, как получить записи, как я сказал вам, ребята, выше.

У моей БД есть неделя, период (утром, днем, ночью, allday), день.

Не знаю, можете ли вы понять мою проблему.

27 26/10/2014 12:30 26/10/2014 13:58 Mobile Outros Alerta CC3 Clientes a ficar com carregamentos em processamento. FECHADO 43 Sim Manhã Criticidade Muito Elevada Relatório SI  26-10-2014 
28 26/10/2014 09:39 26/10/2014 11:45 Serviços Online Área de Cliente Alerta CC3 Área de Cliente indisponível FECHADO 43 Sim Tarde Criticidade Muito Elevada Relatório SI  26-10-2014 
29 26/10/2014 09:39 26/10/2014 11:45 Serviços Online Área de Cliente Alerta CC3 Área de Cliente indisponível FECHADO 43 Sim Manhã Criticidade Regular Relatório SI  26-10-2014 
+0

Как вы определяете границу между утром, днем ​​и ночью? Можете ли вы показать несколько строк выборки из своей базы данных? –

+0

У меня есть столбец, у которого есть период дня. – Nibbler

+0

Когда пользователь вставляет в db, у меня есть выпадающий список с днем ​​рождения, днем, ночью, весь день – Nibbler

ответ

1

Для работы недели за неделей, вам нужна простая формула для преобразования любого DATETIME значения в дату предыдущего воскресенья. Это может быть сделано следующим образом

FROM_DAYS(TO_DAYS(record_date) -MOD(TO_DAYS(record_date) -1, 7)) 

(Если ваши недели начинаются по понедельникам использовать -2 вместо -1.)

Почему это? Потому что вы можете выбрать ценность данных за неделю с этим предложением WHERE.

WHERE record_date >= FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7)) - INTERVAL 1 WEEK 
    AND record_date < FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7)) 

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

SELECT DATE_FORMAT(DATE(record_date),'%W') AS weekday, 
     SUM(Sim = 'Sim Manhã') AS `Manhã`, 
     SUM(Sim = 'Sim Tarde') AS `Tarde`, 
     SUM(Sim = 'Sim Noite') AS `Noite`, 
     SUM(Sim = 'Sim Todo o Dia') AS 'Todo o Dia' 
    FROM dataOcorrencia 
WHERE record_date >= FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7)) - INTERVAL 1 WEEK 
    AND record_date < FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7)) 
GROUP BY DATE(record_date) 

Это работает потому, что значение Sim = 'Sim Manhã' является 1, если столбец Sim имеет значение 'Sim Manhã' и ноль в противном случае. Итак, суммирование значений 1 подсчитывает строки, в которых условие истинно.

Еще одна вещь: DATE_FORMAT(...'%W') дает названия дней недели. Если вы выпустите эту команду в MySQL сразу после открытия соединения, вы получите имена этих дней на португальском языке.

SET lc_time_names = 'pt_BR' 
+1

Олли Джонс, большое спасибо за вашу помощь и поставил меня на правильном пути, спасибо за объяснение и ваше время. – Nibbler

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