Condiciones en consultas con MySQL
30 de agosto de 2005 Autor: Andres Cayon Archivado en PHP/MySQL, TutorialesEl uso de condiciones directamente en la consulta nos facilita la portabilidad entre lenguajes de servidor, simplificar código y economizar recursos.
Habitualmente, nuestro flujo de trabajo consiste en utilizar SQL para extraer información de nuestra Base de Datos y posteriormente utilizar un lenguaje de servidor para validar o modificar dichos resultados. Sin embargo, SQL también nos permite realizar dichas comprobaciones y modificaciones directamente en la consulta.
El contenido de este artículo está enfocado a MySQL con PHP, pero la sintaxis de la consulta es prácticamente idéntica para otras DBMS (excepto Access).
SINTAXIS:
Si has utilizado condiciones del tipo if…then…else, switch…case en cualquier lenguaje, la sintaxis te será sencilla de entender. La estructura básica es:
CASE WHEN ... WHEN ... ELSE ... END
No es necesario el uso de ningún tipo de instrucci?n BREAK, ya que automáticamente devuelve el primer resultado válido.
Existen 2 Tipos de sentencia CASE: Simple y con búsqueda (Searched CASE)
En el tipo simple, se compara una expresión o valor contra un conjunto de expresiones o valores para obtener el resultado:
CASE e_civil WHEN 0 THEN 'soltero' WHEN 1 THEN 'casado' ELSE 'otro/desconocido' END AS estado_civil
En el tipo ‘Searched’, lo que se evalúan son condiciones:
Utilizando el ejemplo anterior, podríamos haber escrito
CASE WHEN e_civil = 0 THEN 'soltero' WHEN e_civil = 1 THEN 'casado' ELSE 'otro/desconocido' END AS estado_civil
Para este artículo, hemos creado un historial de temperaturas que guarda los resultados de cada mes y año:

La consulta de inicio es sencilla: la función AVG nos permitirá calcular la media:
SELECT mes, AVG(temp) AS 'TemperaturaMedia' FROM tbl_temperaturas GROUP BY mes ORDER BY mes ASC
El resultado:

Primer Objetivo: Aquellos registros cuya media del mes estén por debajo de 15 grados aparecerán en una celda de color azul; entre 16 y 25 la celda será de color verde y por encima de 25 será naranja.
Como primer paso, utilizaremos un CASE de tipo Searched para crear un campo nuevo, ‘temp_color’, que guardará el valor hexadecimal del color dependiendo del valor. Cuando la temperatura media sea menor de 16 será azul, entre 16 y 25 será verde y mayor de 25, rojo:
SELECT mes,AVG(temp) AS 'TemperaturaMedia', CASE WHEN AVG(temp) WHEN AVG(temp) BETWEEN 16 AND 25 THEN '#00FF00' WHEN AVG(temp)>25 THEN '#FF0000' ELSE '#FFFFFF' END AS temp_color FROM tbl_temperaturas GROUP BY mes ORDER BY mes ASC
La consulta anterior nos devuelve esta tabla de resultados similar a ?sta:

Segundo Objetivo: Utilizaremos un CASE simple para que la consulta nos devuelva directamente el nombre del mes dependiendo del valor. Aprovecharemos para que la temperatura media redondee a un sólo decimal:
SELECT ROUND( AVG(temp),1) AS 'TemperaturaMedia', CASE mes WHEN 1 THEN 'Enero' WHEN 2 THEN 'Febrero' WHEN 3 THEN 'Marzo' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Mayo' WHEN 6 THEN 'Junio' WHEN 7 THEN 'Julio' WHEN 8 THEN 'Agosto' WHEN 9 THEN 'Septiembre' WHEN 10 THEN 'Octubre' WHEN 11 THEN 'Noviembre' WHEN 12 THEN 'Diciembre' END AS 'NombreMes', CASE WHEN AVG(temp) WHEN AVG(temp) BETWEEN 16 AND 25 THEN '#00FF00' WHEN AVG(temp)>25 THEN '#FF0000' ELSE '#FFFFFF' END AS temp_color FROM tbl_temperaturas GROUP BY mes ORDER BY mes ASC
El resultado de la consulta será éste:

A partir de ahora, nuestro código de servidor no necesitará comprobar ningún valor, ya que serán obtenidos directamente de la base de datos.
En la segunda parte,veremos cómo utilizar esta consulta con Dreamweaver y la sencillez de uso con una tabla dinámica.
Paginas: 1 2
No se ven las imagenes de las tablas, pero lo entendi creo.
Gracias por informar del fallo Jesus:
Creo que lo hemos corregido y que ahora puedas leerlo mejor.
(Odio las migraciones de dominio)
Excelente artÃculo. No cabe duda de que sabiendo bien bien MySQL y teorÃa de bases de datos se pueden lograr grandes cosas.
Me quedo con una duda: ¿todo esto funciona en cualquier versión de MySQL?
Probar es gratis, Escoffié 8-)
Quisiera saber si puedo realizar una pagina aspx en CS3 con acceso a una base de datos MySQL. Como realizo la conexión pues no encuentro el proveedor
Como quedaria el ejemplo con postgresql, seria posible ?