Ja jau ļoti vajag SQLā, tad:
select tmp.tim, IFNULL(event_text, _utf8"")
from (select '07:00' as tim union
select '08:00' as tim union
select '09:00' as tim union
select '10:00' as tim union
select '11:00' as tim union
select '12:00' as tim union
select '13:00' as tim union
select '14:00' as tim union
select '15:00' as tim union
select '16:00' as tim union
select '17:00' as tim union
select '18:00' as tim union
select '19:00' as tim union
select '20:00' as tim union
select '21:00' as tim union
select '22:00' as tim union
select '23:00') tmp LEFT JOIN events ON
DATE_ADD(CURDATE(), INTERVAL tmp.tim HOUR_MINUTE) <= event_date AND
DATE_ADD(DATE_ADD(CURDATE(), INTERVAL tmp.tim HOUR_MINUTE), INTERVAL 1 HOUR) > event_date
ORDER BY tmp.tim
bet personīgi es izvēlētos Delfina risinājumu.