powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор записей по условиям
3 сообщений из 3, страница 1 из 1
Выбор записей по условиям
    #40053997
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

Условно есть таблица звонков по менеджерам

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE calls (
  cls_id int(11) NOT NULL AUTO_INCREMENT,
  cls_action varchar(16) NOT NULL,
  cls_dt_last_call timestamp NULL DEFAULT NULL,
  cls_man_id varchar(8) DEFAULT NULL,
  PRIMARY KEY (cls_id)
)



Нужно заблокировать менеджеров, которые не совершали никаких действий последние 14 дней, то есть cls_dt_last_call старше 14 дней. Но сначала нужно их выбрать. Ничего не приходит в голову, кроме сделать так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
UPDATE managers 
SET man_blocked = 1
WHERE man_id NOT IN
(SELECT cls_man_id
FROM calls
WHERE cls_man_id IS NOT NULL AND cls_man_id <> '' AND
cls_dt_last_call > CURDATE() - INTERVAL 14 DAY) AND man_id IN 
(SELECT cls_man_id
FROM calls
WHERE cls_man_id IS NOT NULL AND cls_man_id <> '' AND
cls_dt_last_call <= CURDATE() - INTERVAL 14 DAY);



Это подходит или есть более правильный подход?

Спасибо
...
Рейтинг: 0 / 0
Выбор записей по условиям
    #40054106
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoft
Но сначала нужно их выбрать.
Зачем надо получать нафиг ненужные данные, которые тут же будут слиты в мусор? чтобы сервер запыхался?

Код: sql
1.
2.
3.
4.
5.
6.
UPDATE managers 
JOIN ( SELECT cls_man_id, MAX(cls_dt_last_call) last_call
       FROM calls
       GROUP BY cls_man_id
       HAVING last_call < CURRENT_DATE - INTERVAL 14 DAY ) last_calls ON managers.man_id = last_calls.cls_man_id
SET man_blocked = 1
...
Рейтинг: 0 / 0
Выбор записей по условиям
    #40054116
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
savsoft
Но сначала нужно их выбрать.
Зачем надо получать нафиг ненужные данные, которые тут же будут слиты в мусор? чтобы сервер запыхался?

Код: sql
1.
2.
3.
4.
5.
6.
UPDATE managers 
JOIN ( SELECT cls_man_id, MAX(cls_dt_last_call) last_call
       FROM calls
       GROUP BY cls_man_id
       HAVING last_call < CURRENT_DATE - INTERVAL 14 DAY ) last_calls ON managers.man_id = last_calls.cls_man_id
SET man_blocked = 1



Спасибо, буду разбираться
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор записей по условиям
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]