Pregunton.Org

947 Preguntas , 2.699 Respuestas , 6 Usuarios conectados

Ordenar un SELECT en MySQL

Necesitaria algún consejillo sobre una consulta SQL que tengo que realizar. Trabajo con MySQL y tengo una tabla con la siguiente estructura:


EXPRESION
CAMPO1
CAMPO2

y necesito hacer la siguiente consulta:


SELECT CAMPO1 FROM TABLA WHERE CAMPO1='VALOR2' OR CAMPO1='VALOR1' OR CAMPO1='VALOR3';

El problema viene porque necesito que aparezcan en ese orden, es decir VALOR2 VALOR1 VALOR3, pero claro, me aparecen en el orden en que están introducidos en la tabla, que en mi caso es VALOR1 VALOR2 VALOR3.


Me han comentado que usara la claúsula UNION, y que así saldrian en el orden correcto, el problema es que cuando la pongo me da un error, que supongo que se deberá a que MySQL no acepta esta claúsula.


¿Me pueden dar alguna idea de cómo hacer esta consulta?


Un saludo y muchas gracias por su tiempo.

 
Preguntado por computerphysicslab
    Share on Google+        

Respuesta:

MySQL soporta el comando UNION a partir de la versión 3.24.xx, por lo que la mayoría de los que usamos MySQL, que tenemos las versiones 3.22.xx y 3.23.xx instaladas, necesitamos dar un pequeño rodeo para obtener el resultado buscado.


Por concretar tu ejemplo un poco más, definimos las constantes siguientes:


VALOR2=2
VALOR1=1
VALOR3=3

Al no disponer del comando UNION, tenemos que crear una tabla temporal con el orden de columnas deseado. La creación de tablas temporales no es igual en MySQL 3.22.xx que en MySQL 3.23.xx, por lo que vamos a ver como se haría en ambos casos.


Si usamos MySQL 3.22.xx la solución sería ésta:


create table t_total (CAMPO1 mediumint(8)) type=heap;
insert into t_total select CAMPO1 from TABLA where CAMPO1=2;
insert into t_total select CAMPO1 from TABLA where CAMPO1=1;
insert into t_total select CAMPO1 from TABLA where CAMPO1=3;
select * from t_total;
drop table t_total;

Si usamos MySQL 3.23.xx la solución sería esta otra:


create temporary table t_total type=heap;
insert into t_total select CAMPO1 from TABLA where CAMPO1=2;
insert into t_total select CAMPO1 from TABLA where CAMPO1=1;
insert into t_total select CAMPO1 from TABLA where CAMPO1=3;
select * from t_total;
drop table t_total;
-- Si este mensaje no se muestra en su totalidad, podrá verlo entero, pulsando una vez encima --
 
Respondido por bankhacker

Añade aquí tu propia respuesta:

 
Respondido por Anónimo el
 

 

 

Pueblos | Compra Venta | Genealógico | Foro Común | Tú Opinas | IberBase
Móvil | Escritorio | Privacidad | Contactar | © Proyectos IP
Preguntar

 

 

campo1 select tabla mysql from where xx insert into valor2 valor1 table valor3 orden consulta union usamos ordenar clausula solucion comando create heap type or drop constantes buscado concretar definimos resultado siguientes creacion temporales haria rodeo temporary tablas mediumint temporal columnas deseado disponer tiempo aparezcan campo2 aparecen introducidos comentado expresion estructura necesitaria consejillo sql trabajo usara saldrian version soporta versiones