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

¿Es posible?. Ordenar resultados con variable

Estas en el tema de ¿Es posible?. Ordenar resultados con variable en el foro de Mysql en Foros del Web. Hola!, tengo una duda con MySQL, no encontré info en Google por eso pregunto por acá. Tengo 3 variables, y cada una tiene un valor ...
  #1 (permalink)  
Antiguo 16/10/2012, 19:02
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 13 años, 5 meses
Puntos: 29
¿Es posible?. Ordenar resultados con variable

Hola!, tengo una duda con MySQL, no encontré info en Google por eso pregunto por acá.

Tengo 3 variables, y cada una tiene un valor numérico, 3, 2 y 1. ¿Puedo ordenar los resultados con una variable?, ahora explico mejor.

El código que pienso utilizar es el siguiente:

Código MySQL:
Ver original
  1. SELECT uDR.artTitulo, uDR.artDescripcion, uDR.artkeywords, SUM(uDR.priority) as SPriority
  2. (SELECT s1.artTitulo, s1.artDescripcion, s1.artkeywords, "$valor1" as priority
  3. FROM articulos s1
  4. WHERE MATCH (artTitulo) AGAINST ('$frase'))
  5. (SELECT s2.artTitulo, s2.artDescripcion, s2.artkeywords, "$valor2" as priority
  6. FROM articulos s2
  7. WHERE MATCH (artkeywords) AGAINST ('$frase'))
  8. (SELECT s3.artTitulo, s3.artDescripcion, s3.artkeywords, "$valor3" as priority
  9. FROM articulos s3
  10. WHERE MATCH (artDescripcion) AGAINST ('$frase'))) uDR
  11. GROUP BY uDR.artTitulo, uDR.artDescripcion, uDR.artkeywords
  12. ORDER BY SPriority DESC

Las variables tienen cierto valor inicial pero si se cumple una condición se les suma 2.

¿Esto es posible o no hay forma de hacerlo?.

Saludos y muchas gracias!

PD: No puedo probar el código por problemas que se me presentaron con la base de datos.

Última edición por gnzsoloyo; 16/10/2012 a las 19:54 Razón: Trash code en el SQL
  #2 (permalink)  
Antiguo 17/10/2012, 06:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 14 años, 5 meses
Puntos: 574
Respuesta: ¿Es posible?. Ordenar resultados con variable

Prueba ese codigo yo diria que te debe funcionar...

Cita:
Las variables tienen cierto valor inicial pero si se cumple una condición se les suma 2.
if(condicion1,$valor1,if(condicion2,$valor2,$valor 3) as priority


CASE
WHEN search_condition1 THEN $valor1
WHEN search_condition2 THEN $valor2
ELSE $valor3
END CASE as priority

esto usaria un valor u otro en funcion de condiciones que pueden depender de los valores de los otros campos y el resto de la query funcionara igual.... (son dos opciones equivalentes usa la que mas te guste)

...if(condicion,".$valor1+2.",".$valor1.") as priority....

(creo que tambien pero es mas facil cambiar la variable....)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 17/10/2012, 08:52
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 13 años, 5 meses
Puntos: 29
Respuesta: ¿Es posible?. Ordenar resultados con variable

Gracias quimfv!, ¿también podría utilizar algo como esto?:

Código PHP:
Ver original
  1. if (strpos(artTitulo, $loquesebusca) < 6) as priority {
  2. $valor1++;
  3. }

¿O no reconocería "artTitulo"?

Saludos!

EDITO: También haría otro if similar con artDescripcion.

Última edición por xarmagedonx; 17/10/2012 a las 09:04
  #4 (permalink)  
Antiguo 18/10/2012, 02:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 14 años, 5 meses
Puntos: 574
Respuesta: ¿Es posible?. Ordenar resultados con variable

Eso es php, lo puedes usar para calcular la variable pero no dentro de la sentencia sql...

Para acerlo en la sentencia deberias usar LOCATE que es la funcion equivalente de MySql


Manual

Cita:
LOCATE(substr,str) , LOCATE(substr,str,pos)

La primera sintaxis retorna la posición de la primera ocurrencia de la subcadena substr en la cadena str. La segunda sintaxis retorna la posición de la primera ocurrencia de la subcadena substr en la cadena str, comanzando en la posición pos. Retorna 0 si substr no está en str.

mysql> SELECT LOCATE('bar', 'foobarbar');
-> 4
mysql> SELECT LOCATE('xbar', 'foobar');
-> 0
mysql> SELECT LOCATE('bar', 'foobarbar',5);
-> 7

Esta función trabaja con múltiples bytes. En MySQL 5.0, es sensible a mayúsculas sólo si algún argumento es una cadena binaria.

.... IF(LOCATE(artTitulo,". $loquesebusca.") < 6,".$valor1+1.",".$valor1.") as priority...

Algo así... ojo que $valor1++ modifica el valor de $valor1 mientras que $valor1+1 no... Es decir si $valor1=1 despues de hacer $valor1++ pasa a ser $valor1=2. Mientras que $valor1+1 no afecta el valor de la variable ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: posible, resultados, 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 01:20.