Pues no he leido tu codigo pero por la descripcion de tu problema es tan sencillo como usar un distinct en tu consulta.
Código SQL:
Ver originalSELECT DISTINCT aqui colocar el resto de tu consulta
De esa manera no se mostraran los datos repetidos.
Yo creeria que con eso se deberia solucionar el problema.
p.s. Pon el codigo en colores, una de las causas por las cuales no lei tu codigo es ese, de esa manera es mas facil para todos mirar el codigo, mi sugerencia solo viene por la descripcion del problema no el analisis del codigo.