Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
MySQL

Как удалить всех пользователей у которых время входа больше 10 дней

03.07.2018, 20:51. Показов 2265. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Есть БД пользователей, где есть столбик, в котором записывается когда последний раз заходил пользователь. Как найти и удалить всех пользователей, которые не заходили больше 10 дней. Запускать этот код буду через cron каждый день
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2018, 20:51
Ответы с готовыми решениями:

Время входа пользователей
Здравствуйте! Есть WS 2008 x32, помогите создать запрос. Требуется сделать выгрузку в excel Подобного формата Пользователь: Время...

Удалить из вектора все элементы, у которых сумма всех делителей больше, чем 10
1. С клавиатуры вводятся длина (<=100) вектора и его (целые) элементы. Удалить из вектора все элементы, у которых сумма всех делителей...

Active Directory ограничения время входа пользователей
Добрый день!) Нужна помощь в Active Directory. Как ограничить время входа пользователей поминутно то есть 12:40 или 14:50 и т.д. и все это...

38
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 10:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Риназ Посмотреть сообщение
Можно же: if (1530689835 < time())
верно, только time() - 10 дней
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 11:05  [ТС]
да, а теперь как удалить не активных?

Добавлено через 4 минуты
Цитата Сообщение от sasha0012 Посмотреть сообщение
time() - 10 дней
кстати, можно и так: time() + 10 дней. Все это записать в БД и сравнить, не прошло ли 10 дней
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 11:08
PHP
1
2
$day10 = time() - (10 * 24 * 60 * 60);
$query = mysqli_query($db, "DELETE FROM users WHERE data_online < $day10");
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 11:16  [ТС]
sasha0012, нет, не работает
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 11:22
Небось тип у поля data_online datetime ?
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 11:26  [ТС]
sasha0012, нет, поменял на int
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 11:38
Ну значит по старинке: Открываем БД, смотрим поле data_online, там должны быть значения такого типа: 1530689835
Далее выводим на экран: echo $day10;
И проходим по базе в поле data_online в поиске значения которое меньше echo $day10. Если не находим, значит все в порядке, если находим, пишем сюда (с выкладкой значений с базы и с экрана).

А можно поступить еще проще, открываете http://localhost/phpmyadmin или http://localhost/tools/phpmyadmin выбираете таблицу users, жмете на вкладку sql и в окно вставляете код: SELECT * FROM `users` WHERE `data_online` < echo time() выкладываем результат.
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 11:43  [ТС]
sasha0012, Я уже пробовал вывести через select, но выводится только тот, кто стоит самым первым, а остальные не выводятся

Добавлено через 19 секунд
Вот почему я спрашивал про цикл while
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 11:47
Риназ, Выборка и обработка результата это разные вещи. Это первое, и второе:
PHP
1
$query = mysqli_query($db, "DELETE FROM users WHERE data_online < NOW() - INTERVAL 10 DAY");
где вы здесь выборку видите?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
04.07.2018, 11:52
Цитата Сообщение от Риназ Посмотреть сообщение
а разница? Опасно или что?
INT-число. Как минимум, Вы не сможете нормально использовать функции для работы с датой и временем в MYSQL. Придётся использовать костыли.
Там, где можно было один простой запрос написать, придётся городить огород и время из PHP передавать.
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 11:53  [ТС]
Цитата Сообщение от sasha0012 Посмотреть сообщение
SELECT * FROM `users` WHERE `data_online` < echo time()
Я пробовал как вы сказали, но вывел ошибку:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'time() LIMIT 0, 25' at line 1
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 12:09
Цитата Сообщение от Риназ Посмотреть сообщение
SELECT * FROM `users` WHERE `data_online` < echo time()
Ладно, я пока не сдаюсь. А так что выведет:
PHP
1
SELECT * FROM `users` WHERE `data_online` < 1529831230
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 12:25  [ТС]
sasha0012, вот что:
#1054 - Unknown column 'data_online' in 'where clause'
Добавлено через 1 минуту
а, вы там пропустили `. Вот теперь все правильно, всех вывел

Добавлено через 1 минуту
SQL
1
SELECT * FROM `users` WHERE `date_online` < 1529831230
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 12:30
Цитата Сообщение от Риназ Посмотреть сообщение
Вот теперь все правильно, всех вывел
вот и отлично! Раз всех выводит, значит всех и удалит.
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 12:35  [ТС]
Может сначала найти всех неактивных, потом удалить?

Добавлено через 3 минуты
Пробовал вот так, но как уже писал, выводит только того, кто стоит первый:
PHP
1
2
3
4
5
$query = mysqli_query($db, "SELECT * FROM `users` WHERE `date_online` < 1529831230");
 
$row = mysqli_fetch_assoc($query);
 
echo $row['name'];
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 12:38
Лучший ответ Сообщение было отмечено Риназ как решение

Решение

Какой смысл? Он и так сначала ищет а потом удаляет:
PHP
1
2
$day10 = time() - (10 * 24 * 60 * 60);
$query = mysqli_query($db, "DELETE FROM `users` WHERE `data_online` < ".$day10);
или в лоб:
PHP
1
$query = mysqli_query($db, "DELETE FROM `users` WHERE `data_online` < 1529831230");
1
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 12:49  [ТС]
sasha0012, Спасибо! Работает, но только не понимаю в чем разница. Так как вы писали выше не работает. Как только поменял `data_online` на тот, который я писал выше, то все сработало. Не пойму в чем разница.
Самое главное все работает!
Я так понимаю, что при входе надо записать в БД время входа?
Запишу только время входа, чтобы постоянно не делать запрос в БД
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
04.07.2018, 12:59
Цитата Сообщение от Риназ Посмотреть сообщение
tarasalk, да, это весь код. Пробовал вот так, но выводит все ок:

$query = mysqli_query($db, "DELETE FROM users WHERE data_online < NOW() - INTERVAL 10 DAY");
if(mysqli_error($query)) {
echo 'Ошибка: '.mysqli_error($query);
}else{
echo 'Все ок!';
}
Цитата Сообщение от Риназ Посмотреть сообщение
Вот теперь все правильно, всех вывел
SELECT * FROM `users` WHERE `date_online` < 1529831230
Ну так вы определитесь с полем! data_online и date_online это два разных поля.
0
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 532
04.07.2018, 13:10  [ТС]
sasha0012, ОЙ) Я вообще не заметил, правильно date
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2018, 13:10

Удалить из матрицы строки, где все числа, средние арифметические цифр которых больше 6, меньше всех простых
Здравствуйте! Очень нужна помощь с задачей: Вводятся размеры матрицы, состоящей из целых чисел, и её элементы. С этой матрицей произвести...

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

Вывести список городов, в которых количество пользователей больше трех
Не понимаю, почему ошибка? Invalid use of group function Я знаю, что ругается на WHERE COUNT(users.cities_id) &gt; 3 но не знаю,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Хабру пора сливаться, время пришло, оно прийдёт за всеми, но ему давно пора (Хабр - галимый плагиат и кликбейт с саморекламой).
Hrethgir 04.08.2026
Стирают публикации с эффективными алгоритмами (в частности по алгоритму обхода дерева, был опубликован там 3-го мая, в зипапке . . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru