Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Ordenar sentencias sql por variables

Estas en el tema de Ordenar sentencias sql por variables en el foro de PHP en Foros del Web. Hola, muy buenas!!! Estoy con un proyecto, y necesito ordenar comentarios de los usuarios segun si son usuarios de oro, plata, bronce o free....(en ese ...
  #1 (permalink)  
Antiguo 07/06/2014, 12:55
 
Fecha de Ingreso: julio-2009
Mensajes: 111
Antigüedad: 14 años, 9 meses
Puntos: 0
Ordenar sentencias sql por variables

Hola, muy buenas!!! Estoy con un proyecto, y necesito ordenar comentarios de los usuarios segun si son usuarios de oro, plata, bronce o free....(en ese orden) Se podria ordenador en la misma sentencia o tendria que tratar los datos de alguna otra manera...

Un saludo! Muchas gracias
  #2 (permalink)  
Antiguo 07/06/2014, 13:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ordenar sentencias sql por variables

Puedes utilizar la cláusula ORDER BY en la consulta.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 07/06/2014, 13:29
 
Fecha de Ingreso: julio-2009
Mensajes: 111
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ordenar sentencias sql por variables

La verdad esq no se me ocurre como seleccionar y ordenador primero todos los comentarios de los usuarios oro, luego plata, bronce y por ultimo gratuitos... si alguien me podria explicarlo, se lo agradeceria!
  #4 (permalink)  
Antiguo 07/06/2014, 13:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Ordenar sentencias sql por variables

En la tabla de comentarios deberías tener un campo que identifique el tipo de usuario; lo malo sería que el identificador sea la palabra (oro/plata/bronce/gratuito), porque los "oro" quedarían en medio, junto con "gratuito".

Por ejemplo, supongamos que tienes el campo tipo_usuario tinyint(1), no nulo, default 0:
0 = gratuito (o como prefieras llamarle)
1 = bronce
2 = plata
3 = oro

Entonces en tu consulta agregas ORDER BY tipo_usuario DESC

Listo!
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 07/06/2014, 14:10
 
Fecha de Ingreso: julio-2009
Mensajes: 111
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ordenar sentencias sql por variables

Ya, lo malo es que estoy trabajando con la BBDD ya hecha por otro. El usuario cuando comenta, en su campo "profile", se inserta un string:

"golden", "silver", "bronze" o "free" y necesito que se organizen de esa manera.. Siempre he seleccionado, ya sean ids o fechas o cualquier dato con ASC o DESC, y la verdad esq no se me ocurre como ordenarlo por esas 4 variables...
  #6 (permalink)  
Antiguo 07/06/2014, 14:19
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Ordenar sentencias sql por variables

Podrías hacer algo de la forma mas simple y facil de entender asi:
Código MySQL:
Ver original
  1. SELECT campo1, campo2, campo3 FROM comentarios ORDER BY FIELD(profile, 'golden', 'silver', 'bronze', 'free');

o de otra forma mas rebuscada y retorcida:
Código MySQL:
Ver original
  1.     campo1,
  2.     campo2,
  3.     campo3,
  4.     IF(profile='golden', 1 ,
  5.         IF(profile='silver', 2,
  6.             IF(profile= 'bronze', 3
  7.                 , 4
  8.             )
  9.         )
  10.     ) AS nro_profile FROM comentarios ORDER BY nro_profile ASC;
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 07/06/2014, 14:23
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 sentencias sql por variables

Si el tema es cómo obtener el resultdo ordenado desde la misma base, por la query, es asunto de BBDD, no de PHP. deberías consultar allí. De lo contrario sólo quedaría hacer un script que pueda realizar ese ordenamiento basado en esos valores, lo que no sería difícil.
Desde la base es posible, pero requiere usar cláusulas y funciones poco usadas, y algo de práctica.
Si mal no recuerdo, en MySQL implicaría usar un
Código MySQL:
Ver original
  1. ...
  2. ORDER BY FIND_IN_SET(columna, 'golden', 'silver', 'bronze', 'free')

Pero cuidado, esa funcion no aplica a otros DBMS. Sólo lo he vusto en MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 08/06/2014, 03:34
 
Fecha de Ingreso: julio-2009
Mensajes: 111
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ordenar sentencias sql por variables

Muchas gracias! Justo es lo que queria:

SELECT campo1, campo2, campo3 FROM comentarios ORDER BY FIELD(profile, 'golden', 'silver', 'bronze', 'free');

:)
  #9 (permalink)  
Antiguo 08/06/2014, 10:00
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 sentencias sql por variables



Perfecto. Esa era. Es tan poco habitual usarla en alguna consulta que me había olvidado de cuál era exactamente.
__________________
¿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: sentencias, sql, usuarios, 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 04:31.