mysql ограничивает количество строк на пользователя в таблице логина - PullRequest
1 голос
/ 23 мая 2011

У меня есть таблица mysql с 1 строкой для каждого пользователя на нашем сайте.Я хочу сохранить последние 10 или около того логинов для каждого пользователя.Некоторые пользователи заходят каждый день;другие только один раз в месяц.Поэтому я не могу просто удалить строки старше определенного периода времени.

Как удалить строки 11 и выше для определенного пользователя (при сортировке по login_date)?У меня есть столбцы для user_id и login_date.Для каждого user_id я хочу сохранить только самые последние 10 строк;остальные должны быть удалены (что будет происходить с помощью задания cron, выполняемого каждую ночь; это нормально, если в течение дня на одного пользователя приходится более 10 записей входа в систему; просто пытайтесь не допустить, чтобы данные со временем становились слишком большими). ​​

Ответы [ 3 ]

2 голосов
/ 23 мая 2011

Почему бы не перехватить процесс, который создает новую строку входа в систему, чтобы также удалить последнюю, если их 10 или более?

Удаление их по мере того, как вы, является лучшей альтернативой, чем пакетное удаление по мере их роста.По мере роста вашего приложения накладные расходы выходят из-под контроля и, как правило, приводят к появлению царапин.

1 голос
/ 23 мая 2011

Вы можете внедрить свою политику хранения, выполнив каждую ночь:

    DELETE logins.*
      FROM logins
           -- Find those records with 10+ more recent records
INNER JOIN (   SELECT l.user_id, l.login_date
                 FROM logins l
            LEFT JOIN logins t
                   ON l.user_id = t.user_id AND l.login_date <= t.login_date
             GROUP BY 1, 2
               HAVING COUNT(1) > 10) too_old
        ON logins.user_id = too_old.user_id AND logins.login_date = too_old.login_date;
0 голосов
/ 23 мая 2011

Будет ли этого достаточно?

SELECT * FROM log WHERE login_date > DATE_SUB(curdate(), INTERVAL 1 DAY)
...