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

Ordenar según valor en variable

Estas en el tema de Ordenar según valor en variable en el foro de Mysql en Foros del Web. Buenas! A ver si me podéis echar una manilla... tengo un procedimiento almacenado con la siguiente sentencia: Código: SELECT productos.idProducto, productos.nombre, productos.producto, productos.precio, productos.stock FROM ...
  #1 (permalink)  
Antiguo 10/12/2012, 10:40
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 6 meses
Puntos: 1
Ordenar según valor en variable

Buenas!

A ver si me podéis echar una manilla... tengo un procedimiento almacenado con la siguiente sentencia:

Código:
SELECT 
  productos.idProducto,
  productos.nombre,
  productos.producto,
  productos.precio,
  productos.stock
FROM
productos;
El caso es que quiero ordenar los resultados con el respectivo ORDER BY pero pasando una variable llamada "orden" que recibe el valor desde la web... Mi pregunta es si existe algo como CASE o IF THEN... para elegir como ordenar desde mySQL.

Un saludo
  #2 (permalink)  
Antiguo 10/12/2012, 10:56
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 según valor en variable

Técnicamente sería posible, pero como no se puede usar en el ORDER BY otra cosa que no sea un nombre de columna o número de orden (numero real), deberías hacerlo con lo que se llama "sentencias preparadas".
Dale una leída al tema y luego vemos los detalles: http://dev.mysql.com/doc/refman/5.0/es/sqlps.html
La posibilidad que mencionas (CASE o IF... THEN), implicaría que deberías escribir un SELECT con su correspondiente ORDER BY por cada opción de orden a conseguir. Es posible, pero algo impráctico para la codificación.

Ten en cuenta que en MySQL no existen los SELECT de ejecución condicional.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/12/2012, 18:12
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: Ordenar según valor en variable

Gracias por tu interesantísima respuesta gnzsoloyo. He mirado un poco el tema que me has escrito sobre las sentencias preparadas y bueno, me surge otra duda. Con el código:

Código MySQL:
Ver original
  1. PREPARE seleccion FROM
  2. 'SELECT
  3.  productos.idProducto,
  4.  productos.nombre,
  5.  productos.producto,
  6.  productos.precio,
  7.  productos.stock,
  8.  productos.fecha_insert
  9. FROM  productos
  10. ORDER BY ? ASC';
  11.  
  12. IF orden = 'nom' THEN
  13.    SET @a = 'nombre';
  14.    SET @a = 'fecha_insert';
  15.  
  16. EXECUTE seleccion USING @a;
  17.  
  18. DEALLOCATE PREPARE seleccion;
Todo parece correcto pero no consigo hacerle entender que las variables son columnas... es decir, donde pongo el símbolo ? es para ordenar esa columna pero no me devuelve nada y por lo que he leido en este foro creo que no se puede llamar a tablas ni nombres de columnas mediante variables... por lo tanto no se como llevar este tema.

Última edición por suudobal; 10/12/2012 a las 18:32 Razón: Añadido
  #4 (permalink)  
Antiguo 10/12/2012, 18:33
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 según valor en variable

Porque las variables no deben contener columnas, sino el numero de la columna que se usará para ordenar.
La idea es que el resultado sea, por ejemplo:
Código MySQL:
Ver original
  1.   idProducto, nombre, producto, precio, stock, fecha_insert
  2. FROM  productos
Si fuese por Producto:
Código MySQL:
Ver original
  1.   idProducto, nombre, producto, precio, stock, fecha_insert
  2. FROM  productos
y si lo quiero por fecha de alta:
Código MySQL:
Ver original
  1.   idProducto, nombre, producto, precio, stock, fecha_insert
  2. FROM  productos

Es decir que el parámetro es un número, y ese es el parámetro que debes enviar.

Nota: Cuando trabajes con números no se ponen jamás entre apóstrofes. Un número no es una cadena de texto.
__________________
¿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 11/12/2012, 12:54
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: Ordenar según valor en variable

Perfecto, ¡exactamente eso es lo que buscaba! Va genial ahora.

Muchas gracias gnzsoloyo!
  #6 (permalink)  
Antiguo 11/12/2012, 13:26
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 según valor en variable

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: resultados, según, select, sql, variables
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 05:31.