Możesz użyć tego zamiast :
$q = "select serial from book where serial like '%"
. implode($serialID, "%' OR serial LIKE '%") . "%'";
$r = mysqli_query($dbc, $q);
while($row = mysqli_fetch_array($r, MYSQLI_ASSOC)
echo $row['serial'].'<br />';
W swoim for zapętl SELECT wszystkie wiersze, ale tylko ostatnia instancja jest zapisywana w zmiennej ( w ostatniej iteracji for pętla), więc pobierasz tylko to w while pętla.
PS Możesz to również rozwiązać, umieszczając swój while pętla na końcu for pętla, ale powyższy kod nie jest aż tak uciążliwy.