Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problema para sacar mínimo valor con varias condiciones

Estas en el tema de Problema para sacar mínimo valor con varias condiciones en el foro de Bases de Datos General en Foros del Web. Hola a tod@s, Tengo una tabla donde meto precios de cursos de formación. Estos cursos pueden ser durante todo el año o cerrados, por ejemplo ...
  #1 (permalink)  
Antiguo 29/12/2010, 05:29
 
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 72
Antigüedad: 16 años, 3 meses
Puntos: 1
Problema para sacar mínimo valor con varias condiciones

Hola a tod@s,

Tengo una tabla donde meto precios de cursos de formación. Estos cursos pueden ser durante todo el año o cerrados, por ejemplo 3 semanas que empiezan el dia x

La tabla que tengo es la siguiente:
id
id_curso
tipoconfiguracion (0 si es fijo y 1 se es anual)
fechaini (fecha de inicio del curso en el caso de que tipoconfiguracion sea 0)
precio

Lo que quiero sacar es el precio mínimo independientemente de si un curso se fija a 0 o 1 con la salvedad de que si es 0 sólo me tome los registros cuya fecha de inicio (fechaini) sea mayor a la fecha de hoy.

Esta es la sentencia que me está volviendo loco. Aunque la fecha de inicio sea inferior a la fecha de hoy me saca el precio de ese registro:

$sqlprecio="select min(precio) as precio from precios where (id_curso='" . $clases['id'] . "' and tipoconfiguracion='1') or ( id_articulo='" . $clases['id'] . "' and tipoconfiguracion='0' and fechaini>" . $hoy . ") and visible='1' limit 1";

$cases['id'] y $hoy devuelve datos correctos.

¿Que estoy haciendo mal?

Gracias!!
  #2 (permalink)  
Antiguo 29/12/2010, 07:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema para sacar mínimo valor con varias condiciones

La ultima condición lo rompe todo y te sobra limit 1, esto último no hace daño,

Tienes

WHERE (a y b) OR (a y c y d) AND e

Eso tiene en cuenta los que cumplen ayb o los que cumplen aycyd y e, estoy suponiendo que e lo deben cumplir todos.

Código SQL:
Ver original
  1. SELECT MIN(precio) AS precio
  2. FROM precios
  3. WHERE ((id_curso=id
  4.               AND tipoconfiguracion='1'
  5.               AND visible='1')
  6. OR ( id_articulo=id AND tipoconfiguracion='0'
  7.         AND fechaini>'hoy'
  8.         AND visible='1'))

WHERE ((a y b y e) OR (a y c y d y e))

Uy de donde sale id_articulo

Si en la tabla precios hay varios precios para un mismo id (y id_articulo era un error) luego funcionara o esta otra, la primera parece más "compacta"....

Código SQL:
Ver original
  1. SELECT MIN(preciomin) AS precio_minimo
  2. FROM
  3. (SELECT MIN(precio) AS preciomin
  4. FROM precios
  5. WHERE id_curso=id AND tipoconfiguracion=1 AND visible=1
  6. UNION ALL
  7. SELECT MIN(precio) AS preciomin
  8. FROM precios
  9. WHERE id_curso=id AND tipoconfiguracion=0 AND fechaini>'hoy' AND visible=1)

$hoy tiene el formato YYYY-mm-dd, no? y los apostrofes alrededor de la fecha otro error? ...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 29/12/2010 a las 08:07
  #3 (permalink)  
Antiguo 29/12/2010, 12:32
 
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 72
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Problema para sacar mínimo valor con varias condiciones

Hola Quim,

Efectivamente con tu primera opción he podido hacer justamente lo que quería al final la sentencia a quedado como sigue:

Código SQL:
Ver original
  1. SELECT MIN(precio) AS precio FROM tienda_precios WHERE (id_curso='" . $clases['id'] . "' AND tipoconfiguracion='1' AND visible='1') OR ( id_curso='" . $clases['id'] . "' AND tipoconfiguracion='0' AND fechaini>'" . $hoy . "' AND visible='1')

Muchas gracias por la ayuda.

Etiquetas: condiciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:05.