Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/11/2010, 15:24
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Como ordenar Group by

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
  1.     histoclini hc INNER JOIN
  2.     mascota m ON hc.mas_id_FK = m.mas_id INNER JOIN
  3.     cliente c ON m.cli_id_FK = c.cli_id
  4.     INNER JOIN linea2 l2 ON m.lin_id_FK2=l2.lin_id2
  5.     his_id>0
  6. ORDER BY his_fecing, DESC, his_id DESC;
La consulta no cambiaría.

Con la subconsulta sería más o menos:
Código MySQL:
Ver original
  1. SELECT H.*
  2. FROM (SELECT * FROM histo1 ORDER BY his_fecing, DESC, his_id DESC) H
  3. GROUP BY  mas_id_FK;
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
  1.     mas_id,
  2.     mas_nombre,
  3.     cli_id_FK,
  4.     lin_id_FK1,
  5.     lin_id_FK2,
  6.     mas_fec_nac,
  7.     mas_cod,
  8.     mas_desc,
  9.     mas_sexo,
  10.     mas_pas,
  11.     his_id,
  12.     ex_id_FK,
  13.     his_ming,
  14.     his_diag,
  15.     MAX(his_fecing) his_fecing,
  16.     his_fecsal,
  17.     cod_ex,
  18.     his_pas
  19. FROM histo1
  20. GROUP BY  mas_id_FK;

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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)