Постоянный круговой цикл 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;
Другие вопросы по тегам