Постоянный круговой цикл MySQL
У меня есть таблица из примерно 10 торговых представителей, и каждому из них должно быть отправлено новое электронное письмо, содержащее информацию о потенциальном клиенте, каждый раз, когда новый объект добавляется в базу данных.
---------------------------------------------
id | name | email | active
---------------------------------------------
1 | bill | bill@billspills.com | y
2 | bob | bob@bobsjobs.com | n
3 | sue | sue@suesshoes.com | y
4 | betty | jan@jansvans.com | y
Я хотел бы, чтобы система отправляла по электронной почте представителям в круговой манере. Как только достигнут конец таблицы, он начинается снова с начала. Я только хочу отправлять электронные письма тем, у кого флаг 'active' установлен в 'y'. Представители имеют возможность отказаться, установив флаг "n". Таким образом, выше будет по электронной почте:
Билл, Сью, Ян, Билл, Сью, Ян и т. д.
Мне нужно, чтобы это было постоянным, так как лиды могут приходить через несколько минут или часов, поэтому мне нужен способ запомнить последнее письмо, чтобы определить, кто должен получить следующее письмо.
Я подумал об использовании пятой колонки 'emailedLast', а затем запросил человека, который получил последнее по электронной почте, и выбрал следующий идентификатор. Я не уверен, как мне вернуться к началу, возможно, путем подсчета записей, чтобы определить последнюю в таблице.
Я спрашиваю, просто чтобы посмотреть, нет ли более простого, более чистого метода, который я пропустил. Я использую PHP для этого.
Обновить:
Решение: (используя Laravel/Eloquent)
public function touch(){
$rep = Rep::where('active','=','y')->orderby('updated_at', 'asc')->first();
$rep->touch();
echo $rep->name;
}
Эквивалентно с использованием SQL:
select * from `reps` where `active` = 'y' order by `updated_at` asc limit 1
update `reps` set `updated_at` = '2015-01-28 03:52:32' where `id` = '2'
1 ответ
Добавить emailedLast
столбец (отметка времени), и когда вы отправляете электронное письмо ведущему, установите для него текущую отметку времени (now()
)
Тогда ваш запрос для поиска следующего представителя по электронной почте будет:
select * from reps where active = 'y' order by date asc limit 1;