2013-05-27 1 views
0

У меня 2 таблицы: members и postsПодсчет количества поста и общая для каждого пользователя, как в диапазоне времени в MySQL

В таблице members, я USERID для каждого пользователя. В таблице posts у меня есть PID за каждое сообщение и USERID от пользователя, создавшего сообщение. В каждом посте также есть number_of_like, указывая, сколько раз сообщение понравилось.

/*Table: posts*/ 
---------------- 

Field    Type    Null Key  Default   Extra   
----------------- ---------------- ------ ------ ---------- -------------- 
PID    bigint(20)  NO  PRI  (NULL)  auto_increment 
USERID    bigint(20)  NO    0       
number_of_like  int(10) unsigned YES    0       
number_of_comment int(10) unsigned YES    0       
date_added   date    NO    0000-00-00 

Теперь я хочу, чтобы подсчитать, что: в диапазоне времени (DATE(date_added) > CURDATE() - INTERVAL 30 DAY), каждый пользователь имеет сколько постов и в общей сложности, как из них. Я считаю месяц и неделю.

Могу ли я сделать это непосредственно в запросе? Или я должен использовать foreach для подсчета для каждого пользователя, записать его в таблицу stats, а затем SELECT от stats при необходимости?

Любая помощь действительно оценена. Спасибо :)

UPDATE

Мне нужно перечислить всех пользователей, независимо от количества их пост.

ответ

2

Да, это можно сделать. Попробуйте что-то вроде этого:

SELECT 
    U.USERID, 
    COUNT(*),    <- total of posts per user 
    SUM(A.number_of_like) <- total of likes in these posts 
FROM users U 
LEFT JOIN posts A ON U.USERID = A.USERID 
WHERE ISNULL(A.USERID) 
    OR A.date_added > DATE_ADD(CURDATE(), INTERVAL -30 DAY) 
GROUP BY A.USERID; 

я использовал DATE_ADD для расчета даты, другие функции даты может быть здесь возможно, тоже.

Update:

После того как вы обеспечили деталь, которую каждый пользователь (а не только те, которые имеют сообщения), я обновил запрос SQL выше.

+0

Почему вы используете DATE_ADD с отрицательным INTERVAL вместо DATE_SUB? – Tarzan

+0

Я уже говорил, что здесь могут быть использованы и другие функции даты. Выбор между «DATE_ADD» или «DATE_SUB» на самом деле не имеет большого значения, это скорее вопрос стилистического вкуса. Я лично считаю, что +/- легче читать, так как вы должны использовать их в арифметическом контексте везде. – Bjoern

+0

Спасибо за ваш быстрый ответ. Я пробовал этот запрос раньше, но этот список перечисляет только тех пользователей, которые на самом деле отправили хотя бы 1 сообщение (поэтому их USERID существует в табличных сообщениях). Мне нужно указать ВСЕ пользователей, если у них нет почты, post_count будет 0 ^^. Нужно ли нам здесь присоединиться? –

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