Если вы хотите убедиться, что вы не потеряете какие-либо данные, у меня есть таблица, для которой ID уже был уведомлен:
NotificationsLog
ID, batchGuid, batchDate
(Дата партии носит исключительно информационный характер, не требуется для этого процесса). В моем php я бы сделал новый Guid, затем запустил вставку:
INSERT INTO Notifications
SELECT t.ID, @guidFromPhp, NOW()
FROM mytable t
LEFT JOIN notificationslog n on n.id = t.id
WHERE n.ID is null
Этот выбор получает все новые данные (новые, как в таблице журналов) благодаря левому соединению, ищущему ноль , Все новые данные записываются в том же пакете Guid.
Тогда я бы вытащил строки и отправил их по электронной почте на основе того же Guid:
SELECT t.ID, t.Whatever
FROM mytable t
INNER JOIN notificationslog n on n.id = t.id
WHERE n.batchGuid = @guidFromPhp
Здесь не нужны даты, и данные не пропадают; процесс отправляет по электронной почте все неотправленные данные при каждом запуске. Если вы запускаете его каждые 15 дней, он делает все за последние 15 дней (кроме первого запуска, который выполняется. Предварительно загрузите журнал со всеми текущими данными, чтобы избежать этого). Если вы запускаете его каждые 30 минут, вы получаете данные за последние 30 минут
Вы можете добавить в таблицу журнала статус, если есть риск, что электронная почта не удастся (или просто удалите эту запись из n - это будет снова взяли в следующий раз)