Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/07/2010, 05:55
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta con if anidados

Empecemos con una prueba:
Código MySQL:
Ver original
  1.   i.id, i.equipo, i.marca,
  2.   GROUP_CONCAT(IF(i.SeCalibra = 'Si', 'Cal',''),
  3.   IF(i.SeVerifica = 'Si', 'Ver',''),
  4.   IF(i.SeMantiene = 'Si', 'Man','') SEPARATOR ' - ')
  5. FROM inventario i INNER JOIN controles c USING(CodigoInterno)
  6.   c.Ultima='1' AND
  7.   DATEDIFF(c.CertHAsta,CURDATE())>0
  8. GROUP BY i.id;

Y algunas notas:
- Los tipos de columna tienen que corresponder al tipo de datos. No se ponen arbitrariamente, y por lo que se percibe estás usando VARCHAR(255) en partes donde los datos jamás llegarían a esa longitud, o bien donde los valores contenidos pueden expresarse de otra forma.
- SI tienes un campo con dos valores posibles (SI/NO, por ejemplo), no tiene sentido ponerlo ni como VARCHAR, ni como INT. En todo caso o usas ENUM o usas BOOLEAN.
- Si el campo es un flag de más de dos estados, usa ENUM
- SI es campo es un flag codificado con diferentes valores según un patrón de significados, usa datos de tipo entero.
- Si en un campo vas a usar sólo números, usa INT y no VARCHAR, usa menos espacio en disco y la comparación es más eficiente.
- No uses descripciones donde puedes usar PK de otras tablas. Aumentas la posibilidad de errores exponencialmente. Por caso: Los proveedores no deben ir como VARCHAR, sino estar en otra tabla y se deben relacionar ambas por la PK del proveedor. Eso tiene varias ventajas: Usar un ID único constante para cada proveedor, y evitar desperdiciar 247 caracteres en cada registro donde pongas esa clave. Este mismo esquema es el que se usa para todas las relaciones del mismo tipo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)