Fantástico, entonces lo que corresponde es buscar la máxima fecha de cada consulta y agruparlas por mascota...
El tema es que el ORDER BY debe ser posterior al GROUP BY, por lo que hay tres soluciones posibles: Ponerle el ORDER BY a la vista, hacer el ordenamiento en una subconsulta o usar MAX().
Con el ORDER BY en la vista lo único que cambiaría sería ella:
Código MySQL:
Ver original cliente c
ON m.cli_id_FK
= c.cli_id
his_id>0
La consulta no cambiaría.
Con la subconsulta sería más o menos:
Con MAX() hay que determinar cuáles son los campos a traer, porque sino traerás dos veces el mismo:
Código MySQL:
Ver original mas_id,
mas_nombre,
cli_id_FK,
lin_id_FK1,
lin_id_FK2,
mas_fec_nac,
mas_cod,
mas_desc,
mas_sexo,
mas_pas,
his_id,
ex_id_FK,
his_ming,
his_diag,
MAX(his_fecing
) his_fecing
, his_fecsal,
cod_ex,
his_pas
Respecto a lo de InnoDB, lamento comunicarte que las tablas que usas no dan soporte a las claves foráneas, por lo que bien podrías ingresar una masconta 341 y ponerle en la historia clínica a esa mascota el 7834 y el sistema no podría evitarlo, simplemente porque las tablas MyISAM
no tienen restricciones FOREIGN KEY. Lo que puede suceder es que le hayas puesto las cláusulas, pero el motor no las creó porque ese motor de tablas, como te digo, no tiene eso.
InnoDB es otro motor de tablas que MySQL puede usar y que desde la versión 5 es el motor por default. InnoDB
si tiene restricciones de FK e incluso soporta transacciones, por lo que es un motor mucho más potente a la hora de crear bases de datos relacionales.
Todos los servicios que conozco y proveen soporte de MySQLQ tienen el InnoDB activado, pero no lo tienen definido como por default, porque en ciertos niveles el MyISAM es más rápido, especialmente con bases de gran nivel de inserciones/actualizaciones por hora. En esos casos los diseñadores sacrifican calidad por cantidad.
¿Se entiende el problema?
Espero que estos detalle ste ayuden
Saludos.