Ti suggerisco allora di aggiungere un ulteriore campo alla tabella dei presenti, che puoi chiamare ad esempio "last_active" e lo definisci datetime.
Ogni volta che un utente connesso apre una pagina del sito aggiorni quel campo correlato alla riga dell'utente in questione a NOW().
Successivamente imposti una query in cui elimini tutti i record dove "DATE_ADD(last_active, INTERVAL 30 MINUTE) <= NOW()".
Praticamente funziona così: ogni volta che un utente si muove nel sito viene marcato come attivo, nel momento in cui è inattivo da 30 minuti o più il primo utente che aggiorna la pagina manda in esecuzione la seconda query cancellando quindi tutti gli inattivi dal sito.
In questo modo però devi anche prevedere chi magari si ferma 30 minuti su una pagina e poi riprende a navigare sul sito sempre da connesso, ma la soluzione più facile è chiudergli la sessione dopo 30 minuti.