Notifica dell'avvio dell'evento

0

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?

    
posta Qwerty1-5 20.11.2014 - 19:37
fonte

1 risposta

2

Crea una tabella che memorizzerà le informazioni sulle notifiche:

TABLE notifications
    event_id
    user_id
    datetime // date and time when notification must be sent

Ogni volta che qualcuno partecipa a un evento, devi inserire una nuova riga nella tabella delle notifiche.

Per informare gli utenti, è necessario uno script che esegua una query mysql come:

SELECT * FROM notifications WHERE 'datetime' <= NOW()

Dopo aver selezionato gli utenti, avvisali ed elimina le righe dalla tabella.

Questo script può essere avviato automaticamente da cron. Più breve è l'intervallo tra gli script, più precisa è la notifica.

    
risposta data 20.11.2014 - 20:27
fonte

Leggi altre domande sui tag