Как вывести все записи которые старше 6 месяцев mysql?
Всем привет!
Можно ли вообще делать так ?
Работает как-то странно, в поле month у меня там enum и у всех записей стоит 6
Отнимает почему-то не 6 месяцев, а 3, как такое возможно ?
Ставлю вместо поля цифру 6 и отлично работает.
mysql 8
DevMan, поля для месяца нужно чтобы пользователь смог выставить это значение сам, через сколько удалится его аккаунт автоматически если он долго не заходил.
DevMan, ну поле month нужно в любом случае, чтобы определить когда пользователь хочет удалять свой аккаунт через сколько месяцев, а дата последнего входа она и так есть, просто она хранится как unix.
Дмитрий Тарасов, при чем тут вообще дата последнего входа?
вам ничто не мешает спрашивать у юзера "через сколько месяцев вы хотите выпилиться" и хранить это значение как date.
DevMan, Задача была такой, сделать как в телеге, если ты не входил в аккаунт определенное кол-во месяцев, удалить аккаунт.
Не совсем как можно хранить месяц как date. Это придется хранить всю дату 2020-09-01, а мне она зачем ?
Да и я не храню месяц, я храню число месяцев через которое нужно удалить аккаунт.
Я просто возьму дату последнего входа и когда он хочет удалится, сравню и удалю.
Не совсем вас понимаю, покажите пример хотя бы, чтобы понять что вы предлагаете, может ваше решение куда лучше и с удовольствием его возьму.
Дмитрий Тарасов,
пользователь выбирает "удалить аккаунт через N месяцев"
я сохраняю в базу delete_at = NOW() + N months
при каждом логине я делаю опять delete_at = NOW() + N months
планировщиком раз в сутки я делаю простой вопрос вида "delete where delete_at <= NOW()"
Дмитрий Тарасов, смысл как раз в том, что проще запрос на удаление и хранится простой и очевидный int вместо enum.
дополнительная плюшка – простая выборка по пользователям в дашборде (если нужна: ты сразу видишь и дату логина и дату удаления).
на самом деле, основной посыл в том, что енум тут нафиг не нужен, тут нужен простой инт. остальное – оптимизации, которое могут быть полезны, могут быть нет.
а если вам нужен выбор из определенных значений, то он делается на фронте и валидируется бэком, а не енумом в базе.
Для правильного вопроса надо знать половину ответа
Если у вас там ENUM, то значением поля является не то, что вы видите на экране, а порядковый номер данного варианта в ENUM.
То есть, для ENUM('1', '3', '6') единица будет давать числовое значение 1, тройка - 2, шестёрка - 3.