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

Ordenar consulta SQL

Estas en el tema de Ordenar consulta SQL en el foro de Mysql en Foros del Web. buenas tardes, quiero ordenar una consulta SQL de una forma poco habitual supongo y no logro dar con la tecla.. mi intención es hacer lo ...
  #1 (permalink)  
Antiguo 02/01/2011, 21:10
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Pregunta Ordenar consulta SQL

buenas tardes,
quiero ordenar una consulta SQL de una forma poco habitual supongo y no logro dar con la tecla..
mi intención es hacer lo siguiente, tengo una tabla simple con los campos: ID, X ambos int y tengo estos datos en la tabla

Código SQL:
Ver original
  1. id x
  2. 1 15
  3. 2 11
  4. 3 20
  5. 4 14
  6. 5 -20

lo que quiero hacer es obtener este orden de consulta:

11 - 14 - 15 - 20 - (-20) o este: (-20) - 20 - 15 - 14 - 11

pero el tema es que si lo ordeno por X ascendente o descendente obtengo el 20 y el (-20) uno en una punta y el otro en la otra..

nose si se entiende, es un poco raro pero lo necesito

muchas gracias de antemano!
  #2 (permalink)  
Antiguo 02/01/2011, 22:53
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 3 meses
Puntos: 46
Respuesta: Ordenar consulta SQL

Hola.

Prueba con algo como esto:

Código MySQL:
Ver original 

Suerte.
  #3 (permalink)  
Antiguo 04/01/2011, 10:28
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

hola Iair,
gracias por tu respuesta, funciona bien, el tema que tengo una estructura mas compleja en la base de datos y no me sirve :/

Saludos.
  #4 (permalink)  
Antiguo 04/01/2011, 10:34
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 3 meses
Puntos: 46
Respuesta: Ordenar consulta SQL

Plantealo y vemos como te podemos ayudar
  #5 (permalink)  
Antiguo 04/01/2011, 10:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ordenar consulta SQL

Cita:
Iniciado por McBlink Ver Mensaje
hola Iair,
gracias por tu respuesta, funciona bien, el tema que tengo una estructura mas compleja en la base de datos y no me sirve :/

Saludos.
Los ejemplos que pones de prueba tienen siempre que tener cierto parecido con el escenario real. Si pones algo demasiado abstracto, o muy alejado de lo que necesitas (como ahora), las soluciones que te podemos dar son genéricas.

Trata de dar ejemplos realistas.

Postea la estructura de las tablas implicadas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/01/2011, 15:06
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

si los entiendo, pensé que con ese ejemplo que les puse lo iba a poder solucionar pero me encontré con otra cosa.. es medio complicado el tema pero haber voy a tratar de explicarme sencillo sin dar vueltas asi me entienden bien:

tengo un mapa plano, hecho con un eje cartesiano común, el cual va de:
X:-20 a X:20 y de
Y:-20 a Y:20

nose si importa pero esta estructura la creo con un bucle for anidado, con la cual el comienzo de la tabla queda de la siguiente forma:



bueno el tema es este particular,
cuando hago esta consulta SQL

Código MySQL:
Ver original
  1. SELECT * FROM (SELECT * FROM x_world WHERE x>=15 or x<=-20) x_world WHERE y>=7 and y<=13 ORDER BY id asc

y el resultado es el siguiente:



y mi problema esta donde marque las dos filas,
si se fijan al ordenar por ID ASC o DESC me queda el 20 ... ... ... -20 y luego arranca de nuevo el 20 ... ... ... -20

y necesito que quede 20 -20 .... ... .... y de nuevo 20 -20 ... .... ...

siempre respetando que:
las X lleven ese orden y las Y esten agrupadas todas iguales, cosa que no logro hacer...


bueno nose como mas explicarme, les comento por las dudas, para que sepan de donde viene este lío, mi idea es crear un mapa toroidal:



este mapa tiene la particularidad, como ven en la imagen, de que cuando llegas por ejemplo al norte (Y=20) apareces en el otro extremo del mapa (Y=-20)


Muchas Gracias, y no se preocupen si es algo muy raro o difícil de conseguir hacer...

Saludos,
  #7 (permalink)  
Antiguo 04/01/2011, 17:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar consulta SQL

prueba con algo así a ver si es lo que quieres:
ORDER BY abs( y ) DESC , abs( x ) DESC , x DESC , y DESC
  #8 (permalink)  
Antiguo 04/01/2011, 19:46
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

Cita:
Iniciado por jurena Ver Mensaje
prueba con algo así a ver si es lo que quieres:
ORDER BY abs( y ) DESC , abs( x ) DESC , x DESC , y DESC
excelente jurena,
le tuve que hacer unos retoques a la consulta y la pude hacer andar,
no tenia idea de que se podía ir haciendo varios "ORDER BY" sucesivos..
siempre se aprende algo nuevo

Saludos y ahí va mi humilde karma,
  #9 (permalink)  
Antiguo 05/01/2011, 11:44
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

hola nuevamente amigos,
me encontré con otro problema y ahora lo creo mas complicado, pero quien sabe quizás acá los expertos del foro me dan una mano..

sigo con le mismo problema, no me di cuenta antes de postearlo completo y ahora me encontré con ésto:

Código MySQL:
Ver original
  1. SELECT * FROM (SELECT * FROM x_world WHERE x>=16 or x<=-19) x_world WHERE y>=7 and y<=13

el problema siga con el orden de x, si lo hacia de 15 a -20 funciona bien con la solucion de jurena, pero ahora si subo un numero mas, de 16 a -19, el problema es el siguiente:




el orden correcto seria 16 17 18 19 20 (-20) (-19)

y al ordenar por el valor absoluto este orden no se lograría nunca.. es así?


muchas gracias nuevamente,
Saludos
  #10 (permalink)  
Antiguo 05/01/2011, 12:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar consulta SQL

Si tienes un orden claro, distinto para x e y, y un rango limitado (es decir, no es infinito, sino que serán los mismos números, tal vez te compensaría crear una tabla específica de orden para x y otra para y. Me explicaré.
ordenx
id| valorx | ordenx
1 | 20 | 1
2 | -20 | 2

ordeny
id | valory |ordeny
1 | 20 | 1
2 |-20| 2

etc.
Luego podrías ordenar por esos campos tras unir las tablas mediante un inner join de esa tabla con cada una de esas tablas x e y. Es un sistema cómodo y rápido (si aplicas los índices adecuados) cuando sacar el orden que quieres supone muchas operaciones (los order by), algo que ralentiza mucho la consulta.
  #11 (permalink)  
Antiguo 05/01/2011, 14:42
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

gracias nuevamente jurena,
estuve pensando y no, me complicaría mucho mas..

ahora te consulto ésto, cual seria la forma mas eficiente de realizar dos consultas y unirlas?
con esto me refiero a hacer una primer consulta por ejemplo para lo valores de 17 a 20 y la segunda de -20 a -18

o me estoy yendo por las ramas..?

gracias!
  #12 (permalink)  
Antiguo 05/01/2011, 15:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar consulta SQL

No me dices por qué, pero podrías hacer dos consultas unidas por UNION ALL. Los mismos campos en el select y en el mismo orden. Luego puedes ordenar por criterios distintos.

(SELECT campo1, campo2 FROM TABLA ... WHERE ... ORDER BY...)
UNION ALL
(SELECT campo1, campo2 FROM TABLA ... WHERE ... ORDER BY...)
  #13 (permalink)  
Antiguo 06/01/2011, 06:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar consulta SQL

Otra opción, si es que ahora he entendido bien es hacer uso de esto:
SELECT x
FROM `tutabla`
ORDER BY IF( x >=0, 1, 2 ) , x ASC

Esto ordenará de 1 a 20 y luego -20 a -1 para x
  #14 (permalink)  
Antiguo 06/01/2011, 09:23
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

jurena, muchas gracias amigo, me ayudaste un monton, anoche tarde probe con el UNION ALL y no lo pude hacer andar, pero ahora con esta ultima consulta que me pasaste parece andar perfectamente!

me podrias explicar como funciona ese IF() ?

y nuevamente gracias,
Saludos
  #15 (permalink)  
Antiguo 06/01/2011, 09:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar consulta SQL

Por partes:
no sé por qué razón dices que no te funciona UNION ALL
(SELECT x FROM tutabla WHERE x >=0 ORDER BY x)
UNION ALL
(SELECT x FROM tutabla WHERE x < 0 ORDER BY x)

algo así debería funcionar.
Respecto al IF, te diré que se trata de una condicional que devuelve un valor; si x >=0, devuelve 1; si no, 2. Luego ordena por el valor devuelto, primero el 1 y luego el 2. Si a eso le sumas un segundo criterio, el valor de x, primero ordena los positivos y luego los negativos, y luego entre los positivos, y como segundo criterio, ordena sus valores. Es un modo de separar dos grupos a la hora de ordenar.
  #16 (permalink)  
Antiguo 06/01/2011, 09:35
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

con respecto al UNION ALL, me traia todos los registros pero luego se me complicaba para reodenarlos no con el campo x sino con el y,
y con ese IF la verdad me simplifico muchísimo las cosas, no tenia idea de que el lenguaje SQL tenia tantas cosas para aprender.. estoy sorprendido o_O

y ya que estamos, lo ultimo y creería que no te molesto más..
algún libro o web en Internet que recomiendes para leer sobre SQL ?

Saludos!
  #17 (permalink)  
Antiguo 06/01/2011, 09:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar consulta SQL

Hay muchas páginas. Algunas recomendables en mi opinión son:

http://www.aulaclic.es/sql/f_sql.htm

http://www.w3schools.com/sql/default.asp


Por supuesto, para las funciones y demás de MySQL, el manual oficial y MySQL con clase:


http://dev.mysql.com/doc/refman/5.0/es/index.html

Por supuesto, que hay libros. Yo conozco alguno, pero son libros técnicos y no soy yo quien, por falta de conocimientos, para aconsejarte. De todas formas, habrá pocas cosas sobre las que no puedas aprender en internet. Tal vez el detalle más técnico, más allá de los manuales y tutoriales, requiere otros conocimientos, pero yo sobre eso puedo decirte muy poco.

http://mysql.conclase.net/curso/index.php

Luego está el aprendizaje más avanzado, que tendrás que llevar a cabo realizando consulta y aprendiendo de gente con experiencia. La participación en foros como el nuestro, leyendo mensajes y buscando, claro, en internet no sólo páginas en español. Tal vez quieras más y busques sobre tuning en la red.

Esto para empezar, pero no olvides que, por lo que se refiere a mysql, todo está en el manual. Revisa siempre que puedas los ejemplos ofrecidos en las aportaciones de los usuarios dentro del manual.

te añado:
http://www.mysqlya.com.ar/
y no añado porque no lo encuentro ahora la dirección de un viejo manual de php-hispano para MySQL con muchos ejemplos

en php-hispano sí podrás encontrar un tutorial que, en mi opinión, es bueno de Eloy8857 de ese foro:
http://www.php-hispano.net/articulos...acionales.html

unos consejos sobre cuya existencia nos informó Vun de nuestro foro:
http://boozox.net/mysql/20-consejos-...s-no-conocias/

Y por supuesto, los tips recogidos en los FAQ's de este foro y de otros de bases de datos. Allí encontrarás mucha ayuda. No se pierde nada por echar un vistazo de cuando en cuando.

saludos.

Última edición por jurena; 06/01/2011 a las 10:06
  #18 (permalink)  
Antiguo 06/01/2011, 10:09
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar consulta SQL

excelente,
ya de a poco voy a ir leyendo, acabo de darle una leida rapida al apunte de php-hispano de Eloy8857 y está interesante

Saludos amigo,
cualquier duda te consulto si no es molestia
un abrazo

Etiquetas: sql
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 09:15.