Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
23 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Como hago esta consulta Mysql
4 respuestas recibidas | 82 visitas | Categoría PHP

Como hago esta consulta Mysql

Avatar de yazo
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 26 posts)

#0 Offline yazo Usuario hace 5días 2h  
Hola a tod@s,

Estoy intentando hacer una consulta mysql que ordene por precio dependiendo de varias fechas, el problema es que tengo varias casillas de precio, que dependen de si el uno está a cero , entonces muestra el otro y así sucesivamente.

Tengo una tabla productos con
Id | Nombre | Descripcion

Y otra de Tarifas con:
Id | IdProducto | fecha | tarifa1 | tarifa2 | tarifapromo | ...

Para un mismo producto puedo tener varias fechas, y cada una de ellas unos precios diferentes, lo que necesito es sacar de todas las fechas de un producto el precio más barato.
Hasta ahora me han ayudado en otro foro y hemos conseguido lo siguiente:
SELECT ..., (SELECT MIN(IF(0=tarifa1, IF(0=tarifa2, IF(0=tarifa3, IF(0=tarifa4, tarifapromo, tarifa4), tarifa3), tarifa2), tarifa1)) AS tarifaprecio FROM Tarifas t WHERE t.idproducto=productos.id) AS tarifaorden tarifa FROM ... ORDER BY tarifaorden

Esta consulta funciona bien en mysql5, pero en mysql4 falla.

¿Me podéis echar una mano? ¿Cómo tengo que hacerlo?

Muchas Gracias

yo probaría algo así

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 737 posts)

#1 Offline jurena Usuario hace 4días 4h  
Esto te saca el precio más barato de un producto incluidas todas las tarifas de todas las fechas. Observa que he puesto 100 repetidas veces. En lugar de 100, deberás escribir un número elevado que nunca vaya a ser la cifra más baja. Lo he tenido que poner para evitar el 0 que te añade por defecto cuando no rellenas alguna tarifa.

SELECT p.nombre, MIN(LEAST(if(t.tarifa1!=0, t.tarifa1, 100), if(t.tarifa2!=0, t.tarifa2, 100), if(t.tarifa3!=0, t.tarifa3, 100), if(t.tarifa4!=0, t.tarifa4, 100), if(t.tarifapromo!=0, t.tarifapromo, 100))) AS preciomasbajo FROM tarifas t INNER JOIN productos p ON t.idproducto=p.idproducto GROUP BY p.idproducto

El LEAST selecciona el precio más barato de entre las tarifas de un registro y el MIN con su agrupación el más bajo de los elegidos mediante LEAST según la agrupación, que en este caso es por producto.
No entiendo lo que me dices de la fecha; si nos lo aclaras con algún ejemplo podremos ayudarte

Re: Como hago esta consulta Mysql

Avatar de yazo
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 26 posts)

#2 Offline yazo Usuario hace 1día 21h  
Gracias por la respuesta jurena.

Lo de las fechas va de la siguiente manera:
Cada producto tiene un registro en la tabla "productos", con su nombre, descripción,...
A su vez tengo otra tabla de tarifas, en la cual un mismo producto puede tener varios registros, para que dependiendo de la fecha de compra tenga un precio u otro, es decir, para la fecha 23/06 puede tener tarifa1=5, tarifa2=6,... pero para la fecha 03/07 tiene tarifa1=4, tarifa2=1,...
Entonces lo que necesito es que me saque para cada producto la tarifa más baja que tenga, independientemente de la fecha, en el ejemplo anterior saldría preciomasbajo=1

Con la sentencia que me has pasado no me le pasa.
¿Se os ocurre alguna forma?

Muchas Gracias

esa consulta debería funcionar

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 737 posts)

#3 Offline jurena Usuario hace 1día 13h  
He probado de nuevo mi consulta en una tabla que tiene un id propio, y datos de tarifa1, tarifa2, tarifa3, tarifa4, tarifapromo, tal y como dices, y funciona perfectamente. Tendrías que cambiar los 100 por un número más alto, que sea superior en cualquier caso al precio más normal.
Pero funcionar, a mí me funciona. No sé tal vez es un problema de versión de MySqL o yo tengo una estructura de tablas distinta a la tuya.

Re: Como hago esta consulta Mysql

Avatar de yazo
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 26 posts)

#4 Offline yazo Usuario hace 17min  
Perfecto!!!

Gracias jurena, tienes razón, había puesto mal la consulta, ahora va perfectamente.
¿Me puede ayudar en otra cosilla?

Ahora he puesto en la tabla de tarifas dos campos llamados "promocion", que coge el valor "ok" si una fecha está en promoción, y otro campo llamado "precioinicial", que pone el precio inicial del producto
¿Como puedo mostrar el campo promocion y el precioinicial de la fecha cuyo valor de tarifa es el minimo?

Muchas Gracias

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster