Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
20 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / MySQL / ¿Como puedo hacer esta consulta en MySQL?
4 respuestas recibidas | 282 visitas | Categoría MySQL

¿Como puedo hacer esta consulta en MySQL?

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

(Nivel 1 - 25 posts)

#0 Offline yazo Usuario 12 feb 08 (23:50)  
Hola,

Estoy intentando hacer una consulta mysql que ordene por precio, el problema es que tengo dos casillas de precio, que dependen de si el uno está a cero , entonces muestra el otro:

SELECT * FROM catalogo ORDER BY precio, precio promocion

La tabla es de la forma:
Nombre | Descripcion | Precio | Preciopromocion
nombre 1 | descripción 1 | 100 | 0 ------------> mostraría precio=100
nombre 2 | descripción 2 | 0 | 25 ------------> mostraría precio=25
nombre 2 | descripción 2 | 50 | 25 ------------> mostraría precio=25

Cuando precio es 0 muestra preciopromocion y viceversa, y siempre que haya preciopromocion mostrará el precio de la promoción.

¿Como lo podría hacer?

La consulta completa es:

Código PHP


SELECT companias.nombre as nombrecompania, companias.logotipo as logocompania, coches.id as idcoche, coches.nombre as nombrecoche, coches.foto as fotocoche, ruta.nombre as nombreruta, ruta.id as idruta, ruta.ano as anoruta, tarifas.mes as mestarifa, tarifas.tarifa1 as tarifa1, tarifas.tarifa2 as tarifa2, tarifas.tarifa3 as tarifa3, tarifas.tarifa4 as tarifa4, tarifas.tarifapromo as tarifapromo FROM (((companias INNER JOIN coches ON companias.id=coches.idncompania) INNER JOIN ruta ON coches.id=ruta.idcoche) INNER JOIN tarifas ON ruta.id=tarifas.idruta) WHERE ruta.oculto='0' AND ruta.destino = '$_GET[destino]' AND ruta.ano = '$anio' AND tarifas.mes='$mes' GROUP BY ruta.id ORDER BY tarifas.tarifapromo, tarifas.tarifa1, tarifas.tarifa2, tarifas.tarifa3, tarifas.tarifa4, companias.nombre, ruta.ano, coches.nombre, ruta.nombre



Necesito que salga el precio en este orden:
tarifa1, tarifa2, tarifa3, tarifa4, tarifapromo
Es decir, si tarifa1 es 0 que salga tarifa2, si es 0 que salga tarifa3, y asi sucesivamente, y que se ordenen de menor a mayor precio.

Gracias por la ayuda

CON IF

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

(Nivel 5 - 729 posts)

#1 Offline jurena Usuario 13 feb 08 (07:01)  
yazo,
Yo lo haría con IF anidados. Te pongo un ejemplo con nombre y 4 tarifas y tú solo tienes que aplicarlo y situarlo al principio donde eliges los campos que quieres mostrar. Lo que te pongo va desde el primer if hasta AS precio, que es el alias con el que llamarás (si quieres) al dato y con el que lo recuperarás mediante PHP.

SELECT nombre, IF (tarifas.tarifaprom > 0, tarifas.tarifaprom, IF (tarifas.tarifa1 > 0, tarifas.tarifa1, IF (tarifas.tarifa2 > 0, tarifas.tarifa2, IF (tarifas.tarifa3 > 0, tarifas.tarifa3, 'no hay precio'))) ) AS precio FROM tarifas

A ver si te sirve

Ojo, porque me has indicado que el precio de referencia es el de tarifaprom, si lo hay, pero no me has dicho el orden de los siguientes si los hubiera. Yo te he puesto, tras tarifaprom, tarifa1, tarifa2 y tarifa3; pero si quieres que sea tarifa3, tarifa2, tarifa1, sólo tienes que cambiar los datos dentro de los IF.
Suerte

Re: ¿Como puedo hacer esta consulta en MySQL?

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

(Nivel 1 - 25 posts)

#2 Offline yazo Usuario 13 feb 08 (09:59)  
¿Me puedes explicar un poco brevemente que hace esta consulta? Esque he buscado manuales en internet pero no lo he entendido mucho.

Gracias

explicación

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

(Nivel 5 - 729 posts)

#3 Offline jurena Usuario 13 feb 08 (10:41)  
A ver si soy capaz de explicarme:
Lo primero que debes entender es que se trata de un dato seleccionado al que he llamado 'precio' (para lo cual he usado el alias mediante la fórmula AS precio), pero no es un dato fijo, sino condicionado, para lo cual uso IF. Con el IF haces una búsqueda condicionada de la que pueden derivarse dos resultados; la sintaxis para MySQL es IF (condicion, resultadosisecumplecondicion, resultadosinosecumple). Yo en este caso hago un uso de IF anidados. Selecciono y muestro algo a lo que llamo 'precio' (el alias), que se forma del siguiente modo: si tarifaprom mayor que cero, 'precio' es tarifaprom; pero si tarifaprom es igual a 0 y por tanto no mayor que cero, busca el segundo elemento del primer IF, que es, a su vez, otro IF. Dentro de este segundo IF, comprueba si se cumple la condición (en tu caso, yo te he puesto tarifa1 > 0); si es así, precio será igual a tarifa1 y no seguirá buscando; si no es así, pasa al segundo elemento, otro IF, el tercero, y así hasta el final. Se trata de un control de flujo en forma de diagrama de árbol que se bifurca de dos en dos por un lado, no sé cuál es el término técnico.
si tarifaprom >0 : tarifaprom; si tarifaprom = 0 : si tarifa1 > 0 : tarifa1; si tarifa 1 = 0 : si tarifa2 > 0 : tarifa2; si tarifa3 >0 : tarifa3; 'no hay precio'...
Al final del ciclo te he puesto un texto 'no hay precio', si es que todos son cero, para que controles los posibles errores a ojo.
Espero haberme explicado.
Por lo demás, se trata de un if exactamente igual que el de PHP.
Quizás haya otras soluciones, pero esta, al menos, funciona.

EDITO para aclararte que si quieres ordenar por precio puedes hacerlo añadiendo ORDER BY precio

creo que es cuestion de logica de la pagina

Avatar de dantrix
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 29 posts)

#4 Offline dantrix Usuario 05 abr 08 (17:48)  
aun novato, pero creo que es cuestion de como se dan las cosas, no creo que un producto tenga cuatro o mas precios(eso que estudio administracion de empresas).
lo que puso jurena es valido, pues te da la tarifa si se cumple cierta condicion, pero no creo que se muy eficiente, asi he estado yo hacineod cosas que a la larga tuve que desechar pues encontrabal la maner amas efciaz de hacerlo.
trata de plantear bien la situacion,
saludos

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