Get next 3 upcoming entries
What you do, is this:


Get 30 items from the database, ordered by showTime
Then, you filter them with the if-attribute in the for-statement


This means, that you could get anywhere from 0 to 30 results. What you want to do, is make sure the filtering happens within the element query. I did not test this (not sure about the time criteria part), but something like this should work:

{% for entry in craft.entries
    .section('shows')
    .order('showTime')
    .search('showDay:*' ~ now |date('N') ~ '*')
    .showTime('&gt;= ' ~ now |date('H:i'))
    .limit(3) %}