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

Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero filtradas

Estas en el tema de Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero filtradas en el foro de Mysql en Foros del Web. Buenas, Personalmente me estoy dejando los cuernos con esto. Necesito recuperar todas las columnas de una tabla, cuyo orden debe de darmelo el campo precio ...
  #1 (permalink)  
Antiguo 01/04/2011, 14:51
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 10 meses
Puntos: 0
Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero filtradas

Buenas,
Personalmente me estoy dejando los cuernos con esto.
Necesito recuperar todas las columnas de una tabla, cuyo orden debe de darmelo el campo precio pero debo recibir primero los filas cuyo stock sea cero.

O sea como esto:

Código:
SELECT products_id
FROM `products` p
WHERE p.products_id
IN (

SELECT products_id
FROM `products`
WHERE (
products_quantity =0
)
)
UNION (

SELECT products_id
FROM `products`
WHERE (
products_quantity >0
)
)
LIMIT 0 , 200
Pero claro aquí no estoy aplicando ordenación por que me peta, aquí obtengo eso, primero los que no tienen stock y luego el resto pero sin ordenación y sin todas las columnas

¿Alguna idea? Muchas gracias
  #2 (permalink)  
Antiguo 01/04/2011, 14:59
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero fi

Esto se parece más pero no funciona:

Código MySQL:
Ver original
  1. FROM `products` p
  2. WHERE p.products_id
  3. IN (
  4.  
  5. SELECT `products_id`
  6. FROM `products`
  7. products_quantity =0
  8.  
  9. )
  10.  
  11. SELECT `products_id`
  12. FROM `products`
  13. products_quantity >0
  14. ORDER BY `products_price` DESC
  15.  
  16. )
  17. LIMIT 0 , 200
  #3 (permalink)  
Antiguo 01/04/2011, 15:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero fi

¿Y esto?
Código MySQL:
Ver original
  1. (SELECT `products_id`
  2. FROM `products`
  3. products_quantity =0)
  4. (SELECT `products_id`
  5. FROM `products`
  6. products_quantity >0
  7. ORDER BY `products_price` DESC)
  #4 (permalink)  
Antiguo 02/04/2011, 10:27
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero fi

Buenas jurena,
Gracias, cambiando el prodicts_id por asteriscos si que funciona! Pero falta un problema! Es ponerle un limit, la base de datos tiene 7.000 productos y debo trabajar con listas de unos 100 para que no tarde en cargar.
Si le pusiese un limit a uno de los select tendría el problema de que lo que quiero es la consulta ordenada total , o sea que por eso como podías ver en mi consulta anterior había un select externo, y eso era un IN, para limitar el resultante de esta, que si que funciona:

Código MySQL:
Ver original
  1. (SELECT *
  2. FROM `products`
  3. products_quantity =0)
  4. FROM `products`
  5. products_quantity >0
  6. ORDER BY `products_price` DESC)
Lo que si que funciona es esto, pero claro, sólo obtengo el products_id si pongo asterisco * en el primer SELECT para recibir todas las columnas peta :(

Código MySQL:
Ver original
  1. SELECT products_id
  2. FROM `products` p
  3. WHERE p.products_id
  4. IN (
  5. SELECT `products_id`
  6. FROM `products`
  7. products_quantity =0)
  8. SELECT `products_id`
  9. FROM `products`
  10. products_quantity >0
  11. ORDER BY `products_price` DESC)
  12. LIMIT 0 , 100

pd: Muchas gracias

Última edición por AlejandroL; 02/04/2011 a las 10:37
  #5 (permalink)  
Antiguo 02/04/2011, 11:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero fi

Así:
SELECT t1.products_id, t1.products_name, t1.products_quantity, t1.products_price FROM ((SELECT products_id, products_name, products_quantity, products_price FROM `products` WHERE products_quantity = 0)
UNION
(SELECT products_id, products_name, products_quantity, products_price FROM products WHERE products_quantity > 0 order by products_price))t1 LIMIT 10

Algunos nombres de campo los he inventado. Adapta la sintaxis a los nombers de tus campos
  #6 (permalink)  
Antiguo 03/04/2011, 10:22
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero fi

Jo+++ (me auto censuro!)
Te iba a responder con un perfecto! va da PM
Peor me he dado cuenta de que se salta el order by de las consultas UNION

Leyendo el manual pone esto:
"Los ORDER BY para comandos SELECT individuales entre paréntesis tienen efecto sólo al combinarlos con LIMIT. De otro modo, el ORDER BY se optimiza a parte."
http://dev.mysql.com/doc/refman/5.0/es/union.html

El problema de si meto un limit es que calro, si le digo que me limite los que estoy cogiendo y cojo por ejemplo 10 de cada....estoy haciendo el tonto, cojo 10 cuyo stock es 0, y otros 10 de los que sía hay stock, con lo que no gano nada

Con lo que no he adelantado nada y ya no se si tirar la toalla!
  #7 (permalink)  
Antiguo 03/04/2011, 10:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero fi

amigo,
nunca tires la toalla tan pronto. Más fácil
SELECT products_id, products_name, products_quantity, products_price, IF(products_quantity=0, 0,1) ord FROM `products` order by ord, products_price
  #8 (permalink)  
Antiguo 05/04/2011, 05:49
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Consulta compleja, varias cosultas a tabla, ordenadas por un campo pero fi

ostras, otras...
lo probaré, que cambiadole cosas esto da mucho juego!
gracias!

Etiquetas: ordenadas, tablas, campos
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 03:20.