Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сколько сообщений я написал за последний месяц? 
:(
    Опции темы
Muerto
Дата 5.9.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: нет
Всего: 4



Как это сделать эффективно?
Вариант с 30 полей, и подсчет суммы этих полей как то слишком сложно как мне кажется...
допустим если мы на 31ом дне то уже ячейки должны переписываться... но так ли это делают профи?

Как вариант экономии сразу думаю в сторону var_explode и сохранение значений через :
Но тогда гемор обновлять ...

А ведь такая задачка довольна таки распространенная в интернете в той или иной форме


--------------------
user posted image
PM MAIL   Вверх
bars80080
Дата 5.9.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



вообще-то, такая распространённая задача имеет два решения.
первый вариант, вообще ничего дополнительного не вводить. просто пройтись поиском по таблице сообщений и посчитать сколько сообщений было именно у тебя за последний месяц:

Код

SELECT count(*) FROM `posts` WHERE `id_user`=14 AND `date`<1234567890 AND `date`>1234567880


второй вариант - завести отдельную таблицу с полями id, id_user, date, добавлять туда запись при каждом новом сообщении, и провести затем тот же самый запрос, что выше
только зачем здесь вторая таблица?
PM MAIL WWW   Вверх
Muerto
Дата 5.9.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: нет
Всего: 4



bars80080, Спасибо, отличные решения!


--------------------
user posted image
PM MAIL   Вверх
sergejzr
Дата 5.9.2010, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 2
Всего: 360



Muerto, не забудьте индекс на "date" поставить.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Muerto
Дата 5.9.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: нет
Всего: 4



Один только недостаток я вижу с точки зрения оптимизации

Если я захочу вывести статистику по самому активности пользователей за месяц по сообщениям, это потребует не хилого запроса...
Даже так за 3 секунды и не придумаю как такое я бы сделал, опыта с базами данных не так много пока что...,
Всплывает термины как count, и group by...




Это сообщение отредактировал(а) Muerto - 5.9.2010, 18:10


--------------------
user posted image
PM MAIL   Вверх
ksnk
Дата 5.9.2010, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Код

SELECT count(*) FROM `posts` WHERE `id_user`=14  and DATE_SUB(CURDATE(),INTERVAL 31 DAY)<=`date`
AND month(`date`)=month(CURDATE())


что-то вроде этого. 
1-го числа, вроде как, надо начинать новую статистику.
В принципе - можно поптимизировать, но imho, mysql и так умный...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
sergejzr
Дата 5.9.2010, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 2
Всего: 360



Цитата(Muerto @  5.9.2010,  17:08 Найти цитируемый пост)
Один только недостаток я вижу с точки зрения оптимизации

Если я захочу вывести статистику по самому активности пользователей за месяц по сообщениям, это потребует не хилого запроса...
Даже так за 3 секунды и не придумаю как такое я бы сделал, опыта с базами данных не так много пока что...,
Всплывает термины как count, и group by...


Код

SELECT id_user,count(*) as cnt FROM `posts` WHERE DATE_SUB(CURDATE(),INTERVAL 31 DAY)<=`date`
AND month(`date`)=month(CURDATE()) GROUP BY id_user ORDER BY cnt DESC


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




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0764 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.