logo

Andrés es manager de ESMMUG y experto en Dreamweaver, Captivate y Contribute.

Tutoriales PHP/MySQL:
Condiciones en consultas con MySQL

—Por Andres Cayon

El 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.

2 Comentarios »

  1. Habria la Posibilidad De Que Agregaran Algunos Conectores de mysql Para Visual basic 6.0 En El Cual Se Puedan Realizar Consultas En Tiempo Real Como Motor De Busqueda Con Protocolo http p Https con El Alta De los Certificados De seguridad SSl de Nuestro Servidor Web

    Gracias, saludos

    Comentario Por carlos — 05/01/2007 @ 3:32 pm

  2. Nop!! No hay

    Comentario Por Bitx — 04/07/2007 @ 9:04 pm

TrackBack URI

Deja tu comentario