Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/05/2013, 13:20
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

Hola sonickseven:

Estoy en el mismo caso que jurena, sin entender exactamente qué es lo que necesitas... desde mi punto de vista y según lo que entendí es que a partir de un parámetro de entrada (en este caso 100) presentar los registros menores y mayores a 100 pero que estén más cercanos a este valor, de tal manera que el parámetro de entrada quede a la mitad...

Si esto es lo que pretendes se me ocurre que hagas algo como esto... supongamos que tienes una tabla con los siguientes valores.

Código MySQL:
Ver original
  1. mysql> SELECT valor FROM tabla;
  2. +-------+
  3. | valor |
  4. +-------+
  5. |     4 |
  6. |     1 |
  7. |     6 |
  8. |     2 |
  9. |     3 |
  10. |     5 |
  11. |     8 |
  12. |     9 |
  13. |     7 |
  14. |    10 |
  15. +-------+
  16. 10 rows in set (0.00 sec)

Ahora bien, supongamos que quieres presentar 5 registros, donde el valor medio debe ser el 5... podrías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SET @mitad = 5;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT valor FROM
  5.     -> (  SELECT valor
  6.     ->    FROM tabla ORDER BY ABS(valor - @mitad) LIMIT 5) T
  7.     -> ORDER BY valor;
  8. +-------+
  9. | valor |
  10. +-------+
  11. |     3 |
  12. |     4 |
  13. |     5 |
  14. |     6 |
  15. |     7 |
  16. +-------+
  17. 5 rows in set (0.00 sec)

observa que el valor @medio queda a la mitad de los registros que regresa la consulta, lo mismo pasa para el parámetro 7:

Código MySQL:
Ver original
  1. mysql> SET @mitad = 7;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT valor FROM
  5.     -> (  SELECT valor
  6.     ->    FROM tabla ORDER BY ABS(valor - @mitad) LIMIT 5) T
  7.     -> ORDER BY valor;
  8. +-------+
  9. | valor |
  10. +-------+
  11. |     5 |
  12. |     6 |
  13. |     7 |
  14. |     8 |
  15. |     9 |
  16. +-------+
  17. 5 rows in set (0.00 sec)

Sin embargo, cuando el parámetro es alguno de los extremos, entonces ya no se cumplirá la situación de que quede en medio, puesto que es imposible:

Código MySQL:
Ver original
  1. mysql> SET @mitad = 10;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> SELECT valor FROM
  4.     -> (  SELECT valor
  5.     ->    FROM tabla ORDER BY ABS(valor - @mitad) LIMIT 5) T
  6.     -> ORDER BY valor;
  7. +-------+
  8. | valor |
  9. +-------+
  10. |     6 |
  11. |     7 |
  12. |     8 |
  13. |     9 |
  14. |    10 |
  15. +-------+
  16. 5 rows in set (0.00 sec)

Espero que esto sea más o menos lo que buscabas, pero si no es así, trata de explicarte un poco mejor y con justo tratamos de ayudarte.

Como observación final, con (LIMIT 0, 10) te trae 10 registros mientras que en tu ejemplo estás mostrando 11... ojo con eso...

Saludos
Leo.