2014-01-03 6 views
1

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

 
id  dateAdded
----------------------------
1 2013-12-24 03:03:19
2 2013-12-24 03:04:19
3 2013-12-24 03:06:14
4 2013-12-24 03:07:23
5 2013-12-25 03:04:19
6 2013-12-26 03:02:19
7 2013-12-26 03:03:19

У меня есть другое имя таблицы (ошибка) следующим образом:

 
id  date
----------------------------
11 2013-12-24 03:03:19
22 2013-12-24 03:04:19
33 2013-12-25 03:06:14
53 2013-12-25 03:04:19
62 2013-12-26 03:02:19

Я хочу, чтобы подсчитать, сколько идентификаторов из двух таблиц (информации и ошибок) с теми же датами, так что результат будет из:

 
date    countinfo  counterror
----------------------------------------
2013-12-24 4 2
2013-12-25 1 2
2013-12-26 2 1

Пожалуйста, если вы могли бы помочь мне с запросом Mysql

+0

Это то, что может быть проще в PHP. Просто выберите нужные строки, проведите через них и увеличьте ассоциированный массив ''date' => 'count''. – Sam

+0

can not i have in mysql? – user3150060

+0

Im, пишущий запрос, займет немного, поскольку мне нужно вставить их все в мою базу данных ..... –

ответ

0

Дайте это попробовать, может быть, это можно записать в лучшую сторону, но это дает желаемый вывод.

SELECT 
DATE(Sub.dateadded) as `Date`, 
( SELECT count(id) 
    FROM test.info 
    WHERE DATE(info.dateadded)=DATE(Sub.dateAdded)) as `CountInfo`, 
( SELECT count(id) 
    FROM test.`error` 
    WHERE DATE(`error`.`date`)=DATE(Sub.dateAdded)) as `ErrorInfo` 
FROM 
(
SELECT `date` as dateadded 
from test.`error` 
UNION SELECT dateadded 
FROM test.info 
) Sub 
GROUP BY Date(Sub.dateadded) 

Обратите внимание, что мое имя базы данных, используемое здесь test, изменить это на ваше имя базы данных.

Поскольку поле даты относится к разным таблицам, вы должны UNION их в подзапросе, чтобы вы могли получить соответствующие даты. Затем оттуда выполняется простой подзапрос в select с параметром date.

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

EDIT

Если вы хотите указать конкретные даты, просто используйте WHERE.

Добавьте эту строку перед GROUP BY

WHERE DATE(Sub.dateadded) IN ('2013-12-24','2013-12-25') 

Если вы хотите между промежуток времени вы можете сделать это

WHERE DATE(Sub.dateadded) BETWEEN '2013-12-24' AND '2013-12-30' 

Это даст даты, доступные между 24-30 декабря.

+0

Что такое «Sub»? – user3150060

+0

Когда вы присоединяетесь к подзапросу, вы должны указать ему имя. вы можете назвать это Сьюзан, если хотите. Но тогда вы должны написать Susan.dateAdded в подзапросе. Его так, что база данных знает, где искать –

+0

im, получая повторяющиеся результаты? – user3150060

-1

Попробуйте это для чистого MySQL подход:

SELECT dateAdded, COUNT(*) as count_info FROM info GROUP BY dateAdded; 
SELECT date, COUNT(*) as count_error FROM error GROUP BY date; 
+1

имя столбца датируется в информационной таблице –

+0

, поэтому вы имеете в виду, что мне нужно выбрать две записи для этого, я не могу сделать это с помощью одного выбора? – user3150060

+0

Вам придется использовать подзапрос с союзом, я думаю. –

0

Попробуйте это, пожалуйста, переименуйте имя таблицы, которое я предоставил.

информация: Join как таблицу получить количество несовпадающих Id

select Date(dateadded) as datepart, 
    count(distinct(infotable.id)) as countInfo, 
    count(distinct(errortable.id)) as counterror from infotable inner join errortable 
    on Date(infotable.dateadded)=Date(errortable.date) 
    group by datepart 
+0

Это должно быть «левое соединение», тем не менее, это означает, что те же даты должны появляться в двух разных таблицах, которые они не делают, так что это будет пропускать даты, если оно будет находиться только в одной из таблиц. –

+0

это сработало, но это не дало мне всех результатов? – user3150060

+0

Thats beacuse для этого, чтобы работать, все даты должны быть в обеих таблицах. Вот почему необходим UNION для выполнения этой работы –

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