У меня есть таблица из 10 торговых представителей, и каждому из них должно быть отправлено новое электронное письмо, содержащее информацию о потенциальном клиенте, каждый раз, когда в базу данных добавляется новый потенциальный клиент.
---------------------------------------------
id | name | email | active
---------------------------------------------
1 | bill | [email protected] | y
2 | bob | [email protected] | n
3 | sue | [email protected] | y
4 | betty | [email protected] | 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'
Добавить emailedLast
столбец (отметка времени), и когда вы отправляете электронное письмо ведущему представителю, установите для него текущую отметку времени (now()
)
Тогда ваш запрос для поиска следующего представителя по электронной почте будет:
select * from reps where active = 'y' order by date asc limit 1;
Других решений пока нет …