Foros del Web » Programando para Internet » PHP »

Como hago esta Consulta Mysql

Estas en el tema de Como hago esta Consulta Mysql en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/02/2008, 01:41
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Como hago esta Consulta Mysql

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?

Gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 12/02/2008, 02:04
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Re: Como hago esta Consulta Mysql

Puedes hacer un alias en una campo calculado (en este caso con IF) y ordenar por el:

SELECT *, IF(0!=Preciopromocion,Preciopromocion,Precio) as precio_real FROM catalogo ORDER BY precio_real

http://dev.mysql.com/doc/refman/4.1/...functions.html
  #3 (permalink)  
Antiguo 12/02/2008, 02:12
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 17 años, 5 meses
Puntos: 1142
Re: Como hago esta Consulta Mysql

Buenas a todos,

Ahora me estoy quedando con la duda.... ORDER BY podria llegar a ordenar por más de un criterio, por lo que entiendo que al marcar el tipo de orden que deseamos en la consulta, ya sea ascendiente o descendiente, tendria que sacarlos los datos correctamente tal y como a planteado yazo en su ejemplo ¿no?

Yazo, has probado de realizar la consulta directamente así:

Cita:
SELECT * FROM catalogo ORDER BY precio1, precio2
¿Te ha dado algún error o no te ha ordenado los resultados correctamente?

Saludos
  #4 (permalink)  
Antiguo 12/02/2008, 02:30
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Como hago esta Consulta Mysql

Gracias por vuestras respuestas DarkJ y popobcn,
Cita:
uedes hacer un alias en una campo calculado (en este caso con IF) y ordenar por el:

SELECT *, IF(0!=Preciopromocion,Preciopromocion,Precio) as precio_real FROM catalogo ORDER BY precio_real

http://dev.mysql.com/doc/refman/4.1/...functions.html
Voy a probarlo y os cuento haber que sale.

Cita:
Buenas a todos,

Ahora me estoy quedando con la duda.... ORDER BY podria llegar a ordenar por más de un criterio, por lo que entiendo que al marcar el tipo de orden que deseamos en la consulta, ya sea ascendiente o descendiente, tendria que sacarlos los datos correctamente tal y como a planteado yazo en su ejemplo ¿no?

Yazo, has probado de realizar la consulta directamente así:

Cita:
SELECT * FROM catalogo ORDER BY precio1, precio2
¿Te ha dado algún error o no te ha ordenado los resultados correctamente?

Saludos
Si lo ordeno de esta forma, cuando encuentra algún precio o precio promoción a 0 me le pone primero, mientras que si está a ceros significa que no hay que usar ese precio.

Gracias de nuevo.
  #5 (permalink)  
Antiguo 12/02/2008, 02:37
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 17 años, 5 meses
Puntos: 1142
Re: Como hago esta Consulta Mysql

Mmmmmmm si el campo no tubiera un valor por defecto quiás funcionaria correctamente sin realizar ninguna condicion...


Pd: Anda... anda!!! Ya me habéis liado!! xD Me veo haciendo pruebas en menos de lo que canta un gallo en el curro para salir de dudas jajajajajajajaja

Saludos!
  #6 (permalink)  
Antiguo 12/02/2008, 13:15
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Llevo todo el día dandole vuelta a la consulta pero nada, os pongo la consulta para ver si me podeis hechar una mano:

Código PHP:
SELECT companias.nombre as nombrecompaniacompanias.logotipo as logocompaniacoches.id as idcochecoches.nombre as nombrecochecoches.foto as fotococheruta.nombre as nombrerutaruta.id as idrutaruta.ano as anorutatarifas.mes as mestarifatarifas.tarifa1 as tarifa1tarifas.tarifa2 as tarifa2tarifas.tarifa3 as tarifa3tarifas.tarifa4 as tarifa4tarifas.tarifapromo as tarifapromo FROM (((companias INNER JOIN coches ON companias.id=coches.idncompaniaINNER JOIN ruta ON coches.id=ruta.idcocheINNER JOIN tarifas ON ruta.id=tarifas.idrutaWHERE ruta.oculto='0' AND ruta.destino '$_GET[destino]' AND ruta.ano '$anio' AND tarifas.mes='$mes' GROUP BY ruta.id ORDER BY tarifas.tarifapromotarifas.tarifa1tarifas.tarifa2tarifas.tarifa3tarifas.tarifa4companias.nombreruta.anocoches.nombreruta.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

¿Alguien me puede ayudar?

Gracias

Última edición por GatorV; 12/02/2008 a las 16:55
  #7 (permalink)  
Antiguo 12/02/2008, 16:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Como hago esta Consulta Mysql

Eso no lo puedes hacer directamente en SQL, tendras que comparar a la hora de mostrar los datos, si tarifa1 es 0 entonces muestras la 2, y asi sucesivamente,.

Saludos.
  #8 (permalink)  
Antiguo 13/02/2008, 02:58
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Como hago esta Consulta Mysql

El problema si no lo hago en la consulta, no podré ordenarlo ascendentemente en base al precio. ¿no?

Gracias por las respuestas.
  #9 (permalink)  
Antiguo 13/02/2008, 03:23
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Re: Como hago esta Consulta Mysql

A veces me siento ignorado. ¿Probaste lo del IF de mysql? Porque se puede anidar, cualquiera de las expresiones del then o del else puede ser a su vez otro IF. Funciona como el if de PHP.

SELECT ..., IF(0=tarifa1, IF(0=tarifa2, IF(0=tarifa3, IF(0=tarifa4, tarifapromo, tarifa4), tarifa3), tarifa2), tarifa1) AS tarifa FROM ... ORDER BY tarifa DESC

Última edición por DarkJ; 13/02/2008 a las 03:32
  #10 (permalink)  
Antiguo 13/02/2008, 05:30
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 17 años, 5 meses
Puntos: 1142
Re: Como hago esta Consulta Mysql

Buenas de nuevo,

La verdad es que este tema me esta gustando como que bastante, ya que normalmente no empleo este tipo de funciones de control en las consultas... ;) Yazo, echale un vistazo a la siguiente info:

Cursito gratuito de MySQL:
http://www.emagister.com/mysql-cero-cursos-2337431.htm

Ejemplos varios de funciones de flujo:
http://neozeratul.wordpress.com/2007...s-no-conocias/

Particularmente, Darkj creo que nos has dado la solución... quizás para los "aficionadillos" nos haga falta echar mano de algun cursillo o quizás ver más ejemplos para pillarle el "tranquillo" al tema.

Saludos

PD: El cursito gratuito aún no lo he hecho, pero esta tarde fijo que caé... a ver que tal esta :) Os comento algo respecto al mismo.
  #11 (permalink)  
Antiguo 13/02/2008, 14:47
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Como hago esta Consulta Mysql

Muchas Gracias chicos, al final de lujo, ha salido perfecto con la consulta que ha puesto DarkJ, y popobcn gracias por los manuales, me han ayudado mucho.

Un Saludo
  #12 (permalink)  
Antiguo 25/04/2008, 13:11
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Como hago esta Consulta Mysql

Hola chicos,

He modificado un poco la base de datos, resulta que ahora he separado los precios en otra tabla, ya que dependiendo de la fecha tiene un precio u otro.

Ahora tengo una tabla productos con
Id | Nombre | Descripcion

Y otra de Tarifas con:
Id | IdProducto | fecha | Precio | Preciopromocion | ...

He intentado usar la misma consulta de if, que funcionaba perfectamente, pero me saca el precio del primer registro de tarifas, y lo que necesito es que de todas las filas de precios me saque la más barata de todas.

¿Me podeis hechar una mano? ¿Tengo que usar una subconsulta?

Gracias
  #13 (permalink)  
Antiguo 26/04/2008, 05:03
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
¿Alguien me puede hechar una mano?

Gracias

¿Nadie sabe como puedo hacerlo?

Gracias por adelantado

¿Alguien me puede ayudar?
Llevo varios días bloqueado y no sé que hacer.

Saludos

Última edición por GatorV; 07/08/2008 a las 08:50
  #14 (permalink)  
Antiguo 29/04/2008, 06:28
 
Fecha de Ingreso: abril-2008
Mensajes: 58
Antigüedad: 16 años
Puntos: 1
Re: Como hago esta Consulta Mysql

Prueba metiendole codigo de pl sql
  #15 (permalink)  
Antiguo 30/04/2008, 00:58
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Como hago esta Consulta Mysql

¿Código de PL? ¿Que es eso?

Gracias por la respuesta
  #16 (permalink)  
Antiguo 30/04/2008, 04:24
 
Fecha de Ingreso: abril-2008
Mensajes: 58
Antigüedad: 16 años
Puntos: 1
Re: Como hago esta Consulta Mysql

Programacion con setencias de sql, pero quizas no aga falta, prueba poniendo a la consulta el comando limit y ordenadolas por precio descendente. Lo q kieres es que solo te muestre el mas barato no? Entonces pon el limit 1 y solo t mostrara el mas barato

si lo consideras chapucero...es verdad lo es, pero de cara al usuario sirve, sino azme caso y az eso mismo y almacena la salida de la consulta en una variable y luego muestrala, todo eso con codigo de pl/sql
  #17 (permalink)  
Antiguo 02/05/2008, 09:57
 
Fecha de Ingreso: abril-2008
Ubicación: Aquí y Allá
Mensajes: 88
Antigüedad: 16 años
Puntos: 3
Re: Como hago esta Consulta Mysql

Hola yazo, a lo mejor te sirve la funcion least

SELECT LEAST(CAMPO1,CAMPO2,CAMPO3) FROM TABLA;

Esta funcion lo que hace es seleccionar el menor valor de la lista de campos que se le pasan como parametros, tambien está GREATEST que hace lo contrario.

Un saludo.
  #18 (permalink)  
Antiguo 05/05/2008, 08:26
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Gracias por contestar raquelina, pero nose si me serviría exactamente LEAST, ya que en mi caso el valor 0 significa que no hay nada.
¿Esto me serviría para ver el menor valor de la tabla tarifas?
Por más pruebas que he realizado, todavía no he conseguido solucionarlo ¿a alguien se le ocurre como podría hacerlo?

Muchas Gracias

Hola a tod@s:

Siento molestaros de nuevo pero esque estoy totalmente bloqueado y no se por donde tirar.
¿Me podéis echar una mano?
Os lo agradecería de veras.

Gracias

Última edición por GatorV; 07/08/2008 a las 08:50
  #19 (permalink)  
Antiguo 08/05/2008, 03:24
 
Fecha de Ingreso: abril-2008
Ubicación: Aquí y Allá
Mensajes: 88
Antigüedad: 16 años
Puntos: 3
Re: Como hago esta Consulta Mysql

mirate este curso de mysql

http://mysql.conclase.net/curso/index.php?cap=000
  #20 (permalink)  
Antiguo 08/05/2008, 10:27
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Hola:

He probado haciendo una consulta en el select de la siguiente manera:

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

El problema es que en mysql 5 funciona bien, aunque un poco mas lento, pero con mysql4 nada.

¿Se os ocurre porque puede ser o como puedo solucionarlo?

Muchas Gracias

Hola,

Porque si pongo esta subconsulta funciona correctamente:

SELECT MIN(LEAST(if(tar.tarifa1>0, tar.tarifa1, 100000), if(tar.tarifa2>0, tar.tarifa2, 100000), if(tar.tarifa3>0, tar.tarifa3, 100000), if(tar.tarifa4>0, tar.tarifa4, 100000), if(tar.tarifa5>0, tar.tarifa5, 100000), if(tar.tarifa6>0, tar.tarifa6, 100000), if(tar.tarifa7>0, tar.tarifa7, 100000), if(tar.tarifa8>0, tar.tarifa8, 100000))) AS tarifamenor FROM tarifas AS tar WHERE tar.iditinerario=itinerarios.id

Me bastaría con este pero la consulta tarda mucho en realizarse.

Si pongo comillas simple en itinerarios.id no funciona y me devuelve vacio:

SELECT MIN(LEAST(if(tar.tarifa1>0, tar.tarifa1, 100000), if(tar.tarifa2>0, tar.tarifa2, 100000), if(tar.tarifa3>0, tar.tarifa3, 100000), if(tar.tarifa4>0, tar.tarifa4, 100000), if(tar.tarifa5>0, tar.tarifa5, 100000), if(tar.tarifa6>0, tar.tarifa6, 100000), if(tar.tarifa7>0, tar.tarifa7, 100000), if(tar.tarifa8>0, tar.tarifa8, 100000))) AS tarifamenor FROM tarifas AS tar WHERE tar.iditinerario='itinerarios.id'

Gracias

Última edición por GatorV; 07/08/2008 a las 08:51
  #21 (permalink)  
Antiguo 07/08/2008, 02:55
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Como hago esta Consulta Mysql

juas... casi medio año después... espero que no hubieras echo presupuesto para esta consulta.

Saludos, y suerte
__________________
Francesc Jimenez
  #22 (permalink)  
Antiguo 07/08/2008, 03:23
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Respuesta: Como hago esta Consulta Mysql

jejeje, he estado realizando modificaciones en el sistema, por eso me asalta ahora este error.

Salu2
  #23 (permalink)  
Antiguo 08/08/2008, 14:25
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Respuesta: Como hago esta Consulta Mysql

¿Alguna idea de como puedo hacerlo?

Muchas Gracias
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 11:59.