Проектирование базы данных / структура - сбор данных с течением времени - PullRequest
0 голосов
/ 25 октября 2011

В настоящее время я нахожусь в процессе структурирования базы данных для сайта, который я создаю.Однако я столкнулся с проблемой.Я хочу регистрировать количество раз, когда пользователь регистрировался каждый день, и затем иметь возможность отслеживать эту информацию в течение больших периодов времени, таких как 8 месяцев, год, 2 года и т. Д.

Единственный способ, о котором я могу думать прямо сейчас, - это просто иметь столбец для каждого дня года / автоматически создавать столбец каждый день.Однако эта идея кажется мне просто глупой.Я уверен, что должен быть лучший способ сделать это, я просто не могу придумать один.

Любые предложения?

Спасибо, Роб

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Создайте отдельную таблицу, в которой вы храните user_id и дату и время входа пользователя в систему.

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

Пример:

CREATE TABLE user_activity (
         userid varchar(50),
         log_in_datetime datetime
       );
0 голосов
/ 25 октября 2011

Вот таблица логина, которую я использую для одного из моих сайтов. Дата и время могут быть зарегистрированы как дата или как метка времени. Если вы используете datetime, обязательно учитывайте часовой пояс вашего сервера mysql.

Есть много вещей для отслеживания. Тогда вы можете просто запросить это позже. Каждое из этих имен столбцов должно быть самоочевидным с поиском Google.

CREATE TABLE `t_login` (
    `id_login` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `id_user` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `id_visit` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'fk to t_visit',
    `id_org` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `when_attempt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `uname_attempt` VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'attempted username' COLLATE 'latin1_swedish_ci',
    `valid_uname` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'valid username',
    `valid_uname_pword` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'valid username and valid password together',
    `pw_hash_attempt` BINARY(32) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',
    `remote_ip` CHAR(20) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci',
    `user_agent` VARCHAR(2000) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci',
    PRIMARY KEY (`id_login`),
    INDEX `when_attempt` (`when_attempt`),
    INDEX `rempte_ip` (`remote_ip`),
    INDEX `valid_user` (`valid_uname`),
    INDEX `valid_password` (`valid_uname_pword`),
    INDEX `username` (`uname_attempt`),
    INDEX `id_ten` (`id_org`),
    INDEX `id_user` (`id_user`),
    INDEX `id_visit` (`id_visit`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=429;
...