elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Como puedo realizar esta consulta?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como puedo realizar esta consulta?  (Leído 3,803 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Como puedo realizar esta consulta?
« en: 11 Enero 2011, 02:27 am »

Hola gente.
Resulta que, quiero hacer en 1 sola consulta esto:
Traer los 10 ID de usuarios de RANKING MAYOR al RANKING de un usuario especificio, y los 10 ID de usuario de de RANKING MENOR al ID del mismo usuario (mencionado antes)

Tengo pensado hacer algo así:
Código
  1. SELECT id
  2. FROM usuarios
  3. WHERE ranking BETWEEN(
  4.                                      (SELECT ranking FROM usuario WHERE id=1) + 10
  5.                                      AND
  6.                                      (SELECT ranking FROM usuario WHERE id=1) - 10
  7.                                  )

Pero como tengo 2 subconsultas iguales, me resulta raro, y tambien se ve SUCIA la consulta.
Hay manera de hacerla mejor? pero que mantenga un buen rendimiento.

Saludos, y gracias


« Última modificación: 11 Enero 2011, 10:24 am por Novlucker » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Como puedo realizar esta consulta?
« Respuesta #1 en: 11 Enero 2011, 10:23 am »

Estas realizando dos veces la misma consulta, ejecuta primero el "SELECT ranking FROM usuario WHERE id=1", almacenalo en una variable y luego si usala en tu segunda consulta.

Saludos


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
KuraraGNU

Desconectado Desconectado

Mensajes: 209



Ver Perfil
Re: Como puedo realizar esta consulta?
« Respuesta #2 en: 11 Enero 2011, 16:44 pm »

Código
  1. SELECT usuarios.id
  2. FROM usuarios
  3. WHERE ranking IN(
  4.                             SELECT ranking FROM usuario WHERE usuario.id
  5.                             BETWEEN usuarios.id-10 AND usuarios.id+10
  6.                           )

Pero que yo el between no lo uso mucho, no se si estará bien su sintáxis, uso el IN más. Ejecutalo y si te da error o no he comprendido bien en enunciado me lo dices ^^ De hecho creo que no lo he hecho bien... Dime que da cuando lo ejecutas, por favor, así sabré como modificarlo.
« Última modificación: 11 Enero 2011, 16:50 pm por KuraraGNU » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como puedo realizar esta consulta?
« Respuesta #3 en: 11 Enero 2011, 20:02 pm »

Estas realizando dos veces la misma consulta, ejecuta primero el "SELECT ranking FROM usuario WHERE id=1", almacenalo en una variable y luego si usala en tu segunda consulta.

Saludos

Ya se que estoy ejecutando la misma consulta. Pero, como hago para ponerlo en una variable antes?

Código
  1. BETWEEN usuarios.id-10 AND usuarios.id+10

Y eso?
En línea

KuraraGNU

Desconectado Desconectado

Mensajes: 209



Ver Perfil
Re: Como puedo realizar esta consulta?
« Respuesta #4 en: 11 Enero 2011, 20:47 pm »

Y eso?

Pues comprueba que el id del usuario esté entre 10 ids arriba y 10 ids abajo del id de los usuarios. ¿que no entiendes?
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Como puedo realizar esta consulta?
« Respuesta #5 en: 11 Enero 2011, 22:59 pm »

Lo que ocurre KuraraGNU es que tu estas consultando +/- 10 ID de usuario en base a un ID, pero el necesita +/- 10 ID de usuario cuyo ranking esten más o menos 10 lugares.

Imagina un ranking con 50 lugares, el tipo en el lugar 30 y tu quieres los que estan 10 lugares antes, y los que estan 10 después.
Skeletron
Código
  1. DECLARE @Rank INT
  2. SELECT @Rank=ranking FROM usuario WHERE id=1
  3. SELECT usuarios.id FROM usuarios WHERE ranking BETWEEN (@Rank-10) AND (@Rank+10)

También podrías hacerlo con consultas individuales y UNION, pero no creo que valga la pena :P

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como puedo realizar esta consulta?
« Respuesta #6 en: 12 Enero 2011, 23:50 pm »

Muchas gracias Novluker.
Voy a tenerlo en cuenta.

Esa variable, queda para siempre? para el usuario? que onda?
Tengo las sesiones abiertas en PHP con mysql_Pconnect. así que creo que va a funcionar bien si la variable queda en la sesion
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Como puedo realizar esta consulta?
« Respuesta #7 en: 13 Enero 2011, 04:00 am »

Se supone que es temporal y que muere una vez son retornados los datos de la consulta :P

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines