io aggiungerei un campo alla tabella delle aste (immagino che ce ne sia una) che prende il valore 1 quando il messaggio viene inviato, così ti eviti il problema dei messaggi ripetuti e non devi controllare ogni volta quali messaggi ci sono nella tabella messaggi (che mi sembra molto più complesso)...

immagino che fai il controllo all'accesso dell'utente, quindi io farei in pseudocodice:

per ogni asta dell'utente
-se l'asta è scaduta e non ci sono offerte
--se il campo è vuoto (o 0 scegli tu)
---invio il messaggio
--altrimenti
---non faccio nulla
--
-