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

No quiero que la Select ordene

Estas en el tema de No quiero que la Select ordene en el foro de Mysql en Foros del Web. Hola a todos, he buscado y buscado y no consigo encontrar lo que quiero. Parece muy facil pero no doy con ello. Imaginaros que tengo ...
  #1 (permalink)  
Antiguo 18/02/2010, 04:54
 
Fecha de Ingreso: septiembre-2007
Mensajes: 16
Antigüedad: 16 años, 6 meses
Puntos: 2
No quiero que la Select ordene

Hola a todos,
he buscado y buscado y no consigo encontrar lo que quiero. Parece muy facil pero no doy con ello.
Imaginaros que tengo una tabla (NUMEROS) con el campo NUMERO, con los siguientes datos:
NUMERO
1
7
3
hago la SELECT:
SELECT NUMERO FROM NUMEROS;

obtengo el siguiente resultado:
1
3
7
Y yo quiero obtener los datos segun les tengo en la base de datos sin que me los ordene. Como sabeis el SELECT hace por defecto el Order by ASC pero yo no quiero.
¿Alguien sabe como solucionarlo?
Muchas gracias de antemano
  #2 (permalink)  
Antiguo 18/02/2010, 07:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: No quiero que la Select ordene

Seguro obtienes este resultado ordenado?
si te sale así, es por que ese fue el orden que utilizaste para ingresar los datos en la tabla.


Código MySQL:
Ver original
  1. mysql> create table numeros(numero integer);
  2. Query OK, 0 rows affected (0.11 sec)
  3.  
  4. mysql> insert into numeros values(1);
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> insert into numeros values(7);
  8. Query OK, 1 row affected (0.02 sec)
  9.  
  10. mysql> insert into numeros values(3);
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> select numero from numeros;
  14. +--------+
  15. | numero |
  16. +--------+
  17. |      1 |
  18. |      7 |
  19. |      3 |
  20. +--------+
  21. 3 rows in set (0.01 sec)
  22.  
  23. mysql>

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 18/02/2010, 10:42
 
Fecha de Ingreso: septiembre-2007
Mensajes: 16
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: No quiero que la Select ordene

Cita:
Iniciado por huesos52 Ver Mensaje
Seguro obtienes este resultado ordenado?
si te sale así, es por que ese fue el orden que utilizaste para ingresar los datos en la tabla.


Código MySQL:
Ver original
  1. mysql> create table numeros(numero integer);
  2. Query OK, 0 rows affected (0.11 sec)
  3.  
  4. mysql> insert into numeros values(1);
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> insert into numeros values(7);
  8. Query OK, 1 row affected (0.02 sec)
  9.  
  10. mysql> insert into numeros values(3);
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> select numero from numeros;
  14. +--------+
  15. | numero |
  16. +--------+
  17. |      1 |
  18. |      7 |
  19. |      3 |
  20. +--------+
  21. 3 rows in set (0.01 sec)
  22.  
  23. mysql>

saludos
Hola Huesos52,
en primer lugar no sabes lo que te agradezco que me hayas contestado pues llevo varios dias dandole vueltas y quizá me he cegado demasiado.
El ejemplo que puse era simplificando bastante lo que tiene que hacer mi aplicación.
Te cuento lo que me sucede:
Tengo un campo número que es autonumérico. Lógicamente se graban los números por orden 1, 2, 3,...425,426
Pues bien en php hago una select de números aleatorios y me coge por ejemplo el 1,7,4,3... estos números los meto en un array para luego posteriormente hacer la consulta a la BD y obtener el resto de campos de cada registro.
Entonces es ahí cuando me ordena de forma ascendente los resultados. Como bien me has dicho porque los datos se han grabado en ese orden.
Y en vez de mostrarme por ejemplo:
Campo1 Campo2 Campo3
1 Juan Ingeniero
7 Luis Arquitecto
4 Carlos Informática

me lo muestra ordenado
Campo1 Campo2 Campo3
1 Juan Ingeniero
4 Carlos Informática
7 Luis Arquitecto

Entonces yo lo que quiero es que no me muestre los datos por orden, sino por la condición que yo le paso.
Select Campo1, Campo2, Campo3 from numero where (Campo1=1 o Campo2=7 o Campo3=4)

Debe ser así porque luego vuelvo a llamar al array y si meto un número nuevo me lo vuelve a ordenar.

Espero que me hayas entendido y que porfavor me puedas ayudar.

Gracias
  #4 (permalink)  
Antiguo 18/02/2010, 11:29
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: No quiero que la Select ordene

Cita:
Tengo un campo número que es autonumérico.
El problema básico que tienes es que ese numero, al ser autonumérico, es PK, y por default MySQL usara siempre el índice para devolver la consulta.
Por otro lado, como al ser PK, es también un índice agrupado (cluster), no solamente se usa como referencia: también se usa para ordenar físicamente la tabla, con lo que el orden de entrada que tu le das deja de existir en el momento en que los registros se almacenan.
Si tuvieses la posibilidad de leer línea a línea la tabla, verías que el orden de los registros ya no es el orden de entrada... Sino el orden establecido en la PK.

La única forma de evitar el ordenamiento,a primera vista, es no crear una PK, y menos autonumérica, sino establecer un indice UNIQUE, posiblemente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/02/2010, 01:59
 
Fecha de Ingreso: septiembre-2007
Mensajes: 16
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: No quiero que la Select ordene

Hola y gracias de nuevo,
gnzsoloyo he probado lo que me has dicho y sigo con el mismo problema. A ver si ahora me explico bien. He hecho lo siguiente:

1. - mysql> CREATE TABLE numeros(numero INTEGER);
Query OK, 0 rows affected (0.11 sec)

2. - mysql> INSERT INTO numeros VALUES(7);
Query OK, 1 row affected (0.00 sec)

3. - mysql> INSERT INTO numeros VALUES(1);
Query OK, 1 row affected (0.02 sec)

4.- mysql> SELECT numero FROM numeros where numero='1' or numero='7';
+--------+
| numero |
+--------+
| 7 |
| 1 |
+--------+
2 rows IN SET (0.01 sec)


Pues yo lo que quiero es que me muestre los números según le estoy indicando la en la select. Primero el 1 y luego el 7 (where numero='1' or numero='7').
+--------+
| numero |
+--------+
| 1 |
| 7 |
+--------+

Como bien dijo huesos52 los muestra según se grabaron, pero yo no quiero ese orden, quiero como ya he dicho el que le indico en la select.

Ya no se que hacer, quizá la solución sería crear una tabla temporal? aunque creo que tampoco me serviria porque se borraría al finalizar el script

Muchas gracias de antemano

Última edición por lukitas; 19/02/2010 a las 03:38
  #6 (permalink)  
Antiguo 19/02/2010, 10:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: No quiero que la Select ordene

Creo que así:
SELECT numero FROM numeros where numero IN (1,7) ORDER BY FIELD(numero, 7,1);
  #7 (permalink)  
Antiguo 19/02/2010, 11:38
 
Fecha de Ingreso: septiembre-2007
Mensajes: 16
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: No quiero que la Select ordene

Cita:
Iniciado por jurena Ver Mensaje
Creo que así:
SELECT numero FROM numeros where numero IN (1,7) ORDER BY FIELD(numero, 7,1);
Hola jurena,
muchas gracias por tu mensaje, en un principio parece que si que me sirve, lo he probado con ciertos datos y hace lo que quiero. Pero bueno lo probaré bien para estar seguro.
Muchas gracias a todos (huesos52, gnzsoloyo y jurena)

Etiquetas: select
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:57.