Кто-нибудь знает, как запросить базу данных vbulletin, чтобы создать отчет о количестве регистраций в месяц / год для достижения таких результатов, как ..
MM/YYYY Count 01/2001 : 10 02/2001 : 12 ... ...
Спасибо за ответы ниже. Моя последняя версия, которая работает, выглядит следующим образом:
SELECT COUNT(*) as 'Registrations', YEAR(FROM_UNIXTIME(joindate)) as 'Year', MONTH(FROM_UNIXTIME(joindate)) as 'Month' FROM vbfuser GROUP BY Year,Month
Я не знаком с структурой базы данных vBulletin, но вы должны сделать что-то вроде этого , предполагая, что ваша таблица пользователя имеет столбец даты / даты / времени / timestamp created_date
или reg_timestamp
или что-то похожее, используя функции MySQL YEAR () и MONTH () .
select count(*) as count, year(reg_timestamp) as year month(reg_timestamp) as month from users group by year, month;
Это приведет к чему-то подобному:
+-------+-------+------+ | count | month | year | +-------+-------+------+ | 4 | 11 | 2008 | | 1 | 12 | 2008 | | 196 | 12 | 2009 | | 651 | 1 | 2010 | +-------+-------+------+
Изменить: относительно комментария Дейва: дата vBulletin, похоже, хранится в формате Unixtime. В этом случае просто перенос столбца с помощью FROM_UNIXTIME
преобразует его в читаемую дату MySQL:
select count(*) as count, year(from_unixtime(reg_timestamp)) as year month(from_unixtime(reg_timestamp)) as month from users group by year, month;
vBulletin сохраняет ежедневную статистику, поэтому может быть лучше работать с этой таблицы. Это не большая проблема для подсчета новых регистраций, но если вы хотите подсчитать количество сообщений, это в конечном итоге станет дорогим. Вот пример, который делает то, что вы хотите:
SELECT DATE_FORMAT(FROM_UNIXTIME(dateline), '%m/%Y') AS month, SUM(nuser) AS new_users FROM stats GROUP BY month ORDER BY dateline
Вы должны сгруппировать по полю:
select MONTHYEAR month , count(*) from tabname group by MONTHYEAR
с этим вы будете читать все месяцы и подсчитывать разные строки, получая необходимую информацию.
Если вы предоставите таблицу пользователей, это может быть более полезным;)