Noticias
Entradas
Comentarios
hacker emblem

En un proyecto en el que estoy trabajando necesitaba seleccionar ciertos datos dependiendo de si el usuario escogía un artículo o bien un pack de artículos.

En la siguiente tabla puede verse que cada fila o bien apunta a la id de un artículo o bien a la ide de un pack.
bd-listaboda

Para conseguir mi propósito y obtener o los datos del artículo o los datos del pack directamente con una sola consulta, desarrollé la siguiente:

  1. select distinct
  2. if (lb.id_articulo  '', f.id_categoria, '') as id_categoria,
  3. if (lb.id_articulo  '', f.parent_id_categoria, '') as parent_id_categoria,
  4. if (lb.id_articulo  '', concat('arti',a.id_articulo), concat('pack', p.id_pack)) as id_articulo,
  5. if (lb.id_articulo  '', a.nombre, p.nombre) as nombre,
  6. if (lb.id_articulo  '', a.descripcion, p.descripcion) as descripcion,
  7. if (lb.id_articulo  '', a.unidades, '') as unidades,
  8. if (lb.id_articulo  '', a.PVP, p.PVP_pack) as PVP, lb.cantidad,
  9. e.id_enlaces_novios as enlaces_novios
  10. from
  11. articulo a,
  12. categoria f,
  13. packs p,
  14. enlaces_novios e
  15. inner join listaboda lb on (lb.id_enlaces_novios = e.id_enlaces_novios and e.id_enlaces_novios = 10)
  16. where
  17. f.id_categoria = a.id_categoria
  18. and (lb.id_articulo = a.id_articulo and lb.id_articulo  '') or (lb.id_pack = p.id_pack and lb.id_pack  '')
  19. and a.visible = 1

Podemos ver la sintaxis en su esplendor en la línea 4:

  1. IF (lb.id_articulo  '', concat('arti',a.id_articulo), concat('pack', p.id_pack)) AS id_articulo

Lo que viene a decir algo así como “si en la tabla listaboda (la que se ha mostrado en la imagen) el id del artículo NO es nulo, concatenar la frase ‘arti’ con el id del artículo (por ejemplo: arti128), en otro caso concatenar ‘pack’ con el id del pack. Asignar el resultado al campo ‘id_articulo'”.

Por tanto, al recuperar el campo ‘id_articulo’ tendremos o bien ‘arti128’ o ‘pack3’, con lo cual sabemos el tipo de artículo que hemos recuperado, su ID y el resto de los datos asociados.

A 3 personas les gusta esta entrada

3 Comentarios a “Selección condicional (IF) de campos en MySQL con múltiples tablas (JOIN)”

  1. piponazo dice:

    Snifff mysql que bonitos tiempos :__( xD

  2. neonigma dice:

    Jurl yo lo tengo hasta en la sopa xDD, y ya voy haciendo consultas de entidad poquito a poco…

Dejar un comentario