Vamos al punto de una consulta a tres tablas. Eso se escribe simplement easí:
Código SQL:
Ver originalSELECT * FROM lecturas L
INNER JOIN contadores C ON L.id_contador = C.id
INNER JOIN instalaciones i ON C.id_inst = i.id
WHERE L.fecha>'2014-05-15'
Quiero hacerte notar, antes que nada, que no es correcto poner algo como.
porque la fecha expresada de ese modo en realidad es una operación aritmética de resta (2014-05--15 = 1994). Para que MySQL tome contextualmente la fecha como
fecha, debe ser una cadena de texto, o bien aplicar una cunción de conversión:
Ahora bien, respecto a que no te salgan repetidos algunos de los datos (desde la primera a la ultima tabla), eso es inevitable desde el punto de vista de SQL.
La base de datos sólo puede devolver datos que se relacionan, y por tanto devolverá los datos en función de la cardinalidad de la relación. Si la relación entre la primera tabla y la segunda es de 1:10, devolverá 10 veces los datos de la primera relacionados con cada uno de los de la segunda que sean diferentes entre sí.
Obviamente, si la relación entre la segunda y tercera no es 1:1, el resultado se multiplicará.
Lo que quiero que entiendas es que eso NO ES UN EROR. Es el comportamiento normal y esperado de una consulta a una base de datos.
Si tu problema es cómo hacer para mostrar ese resultado sin repetir los datos que son iguales trne dos registros, bueno, para eso se usa el ingenio, y se programa el script...
¿Cómo?
Mostrando en cada línea de la tabla en pantalla los datos de cada valor del array sólo cuando cambie su valor respecto al array del ciclo anterior.
No hay mucho más secreto que ese. Eso se llama PROGRAMAR, y la lógica de ese caso es siempre más o menos la misma.