Sto attraversando un periodo difficile per capire come risolvere questo problema. Fondamentalmente ho un mini social network con notifiche ed eventi. Voglio aggiungere tale funzionalità quando 1 giorno prima dell'inizio di un evento e 1 ora prima dell'inizio dell'evento, gli utenti che partecipano all'evento ricevono le notifiche che l'evento inizia rispettivamente tra 1 giorno o 1 ora.
Sto usando MySQL + PHP, quindi penso a questo:
Nella mia tabella degli eventi ho una colonna di tipo DATETIME
che contiene la data e l'ora di inizio di ogni evento. Per poter inviare notifiche per gli eventi di partenza devo eseguire controlli e questo è dove ho un po 'di problemi. Se controllo con questa tecnica
SELECT * FROM events WHERE starting > NOW() AND starting - INTERVAL 1 DAY < NOW()
Verificherò gli eventi con un'ora di inizio tra le 24:00 di oggi e le 23:59 di oggi. Tuttavia, ciò significa che dovrei eseguire solo 1 controllo al giorno che non è affidabile ed è anche impossibile risolvere l'1 ora prima che l'evento avvii un problema di notifica. Inoltre, penso che questo sarebbe inefficiente perché questa query non è una semplice selezione, il che significa che solo una delle espressioni trarrà vantaggio dall'indice, l'altra dovrà ancora scorrere tutti i risultati trovati nella prima. Suppongo che questa possa essere una preoccupazione minimalista ma per me è importante.
Qualcuno può suggerire un'altra soluzione a questo problema? Non sto cercando codice completo ma un'idea che possa essere realizzata in MySQL o in PHP, ma cerco che sia efficiente e semplice.
Un'altra preoccupazione che ho, come domanda a parte: col tempo, gli eventi del tavolo finiranno per riempirsi di eventi e molti, se non la maggior parte di loro, saranno eventi passati che sono già accaduti, quindi mi chiedo se sarebbe una buona idea creare un'altra tabella per gli eventi passati e spostarli lì, per non rallentare mysql durante la ricerca di eventi che stanno per iniziare a inviare notifiche?