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

[SOLUCIONADO] como hacer una consulta y que de un resultado en medio de dos parametros

Estas en el tema de como hacer una consulta y que de un resultado en medio de dos parametros en el foro de Mysql en Foros del Web. Hola chicos bueno pues hasta el momento no había tenido este problema y bueno ya me salio así que ni se como hacer la pregunta!! ...
  #1 (permalink)  
Antiguo 14/05/2013, 21:35
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
como hacer una consulta y que de un resultado en medio de dos parametros

Hola chicos bueno pues hasta el momento no había tenido este problema y bueno ya me salio así que ni se como hacer la pregunta!! :/ pero bueno espero explicarme bien:

quiero hacer una consulta y quiero como un intervalo osea que un dato que envío que de en mitad de el resultado de la consulta ejemplo:

select ph.name, ph.cod
from photo as ph, libro as li
where li.cod=ph.libro and (ph.cod<='100' or ph.cod>='100') limit 0,10;

el resultado que quiero que salga seria:

95
96
97
98
99
100 /*este tiene que quedar en la mitad*/
101
102
103
104
105
ignore el nombre!!!

pero por desgracias no me sale así

espero haberme explicado bien y de antemano gracias :D
  #2 (permalink)  
Antiguo 15/05/2013, 12:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

sonickseven,
no acabo de entender lo que quieres. Al pedir un limit 0, 10, luego puedes mediante una consulta ubicarte en la posición que deseas, pero eso dependerá de si devuelve suficientes valores. ¿Qué significa la mitad, es una posición, o es un valor, van ordenados siempre y por qué no lo resuelves luego con programación? Acláranos con más ejemplos o de una manera más concreta qué es lo que quieres hacer exactamente.
  #3 (permalink)  
Antiguo 15/05/2013, 13:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.
  #4 (permalink)  
Antiguo 15/05/2013, 14:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

Tal vez lo que quieres es traerte los 5 anteriores o 5 posteriores de un registro concreto, por ejemplo el campo que cuyo valor sea 10.
Código MySQL:
Ver original
  1.  
  2. SELECT campo
  3. FROM tutabla
  4. WHERE campo < 10
  5. )  anteriores, (
  6.  
  7. SELECT campo
  8. FROM tutabla
  9. WHERE campo > 10
  10. ) posteriores

Dinos qué quieres exactamente
  #5 (permalink)  
Antiguo 15/05/2013, 20:08
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

si los dos estan bn osea jurena es como tu dices pero como puedes ver son dos consulta y eso es lo que yo no quiero aunque con programacion lo arrglo pero es un lio mas grande y pues con el codigo de arriba de Lonardo_josue tal si me sirva pero me muestra error en la parte del "Query OK (002)"

y si el problema es que quiero que el valor que quiero que me salga a consultar salga en medio de los resultados, aunque esto si es imposible cuando el resultado esta al extremo (principio o fin)
  #6 (permalink)  
Antiguo 15/05/2013, 20:19
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

ya ok ya lo arregle y si es como mi amigo leonardo_josue dice aunque como jurena me muestra lo intentare :D

por cierto como se llama lo que hiciste lonardo_josue osea el "SET @mitad=10" por que en la universidad nunca me lo enseñaron!!!
  #7 (permalink)  
Antiguo 15/05/2013, 21: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: como hacer una consulta y que de un resultado en medio de dos parametros

Cita:
Iniciado por sonickseven Ver Mensaje
por cierto como se llama lo que hiciste lonardo_josue osea el "SET @mitad=10" por que en la universidad nunca me lo enseñaron!!!


Eso es una simple incialización de una variable de usuario.
¿Nunca usaste variables en SQL? ¿En serio?

__________________
¿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 16/05/2013, 10:31
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

Hola sonickseven:

Tal como lo menciona gnzsoloyo

Código:
SET @mitad = 10;
es la manera en que se utilizan variables en MySQL...

Poner esto

Código:
SET @mitad = 10;
....
ABS(valor - @mitad)
...
Es equivalente a haber puesto esto:

Código:
....
ABS(valor - 10)
...
Ojo con eso... este es un concepto básico de SQL... igual que a gnzsoloyo me soprende que nunca lo hayas utilizado.

Saludos
Leo.
  #9 (permalink)  
Antiguo 19/05/2013, 13:36
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

ummm gracias chicos... :D

bueno gnzsoloyo la verdad solo hize hasta 4 semestre de ing de sistemas aunque en el semestre que me enseñaron mysql lo de las variables la verdad no lo sabia gracias..

BUeno ahora chicos pongo la consulta que quiero a continuacion
Código MySQL:
Ver original
  1. SET @mitad = 304;
  2.  
  3. SELECT cod, nombre FROM
  4. (  SELECT cod, nombre
  5. FROM fotos
  6. where libro='173'
  7.  ORDER BY ABS(cod - @mitad) LIMIT 7) T

pero el resultado no me sale como quiero

Código MySQL:
Ver original
  1. | cod | nombre                                                                        |
  2. +-----+-------------------------------------------------------------------------------+
  3. | 335 | abstract-505575.jpg                                                           |
  4. | 334 | bleach_kurosaki_ichigo_desktop_1360x768_hd-wallpaper-1093183.jpg              |
  5. | 331 | red_eyes_anime_girls_pixiv_fantasia_desktop_877x1164_hd-wallpaper-1105447.jpg |
  6. | 330 | artwork_realism_desktop_1075x747_hd-wallpaper-1097715.jpg                     |
  7. | 329 |                                                                               |
  8. | 323 | anime_girl_155-normal.jpg                                                     |
  9. | 321 | Yuna.full.111309.jpg                                                          |
  10. +-----+-------------------------------------------------------------------------------+
  11. 7 rows in set (0.00 sec)

como se podran dar de cuenta el valor 304 que es el que quiero que quede en la mitad no queda por ningun lado :/ y la verdad de esto si poco se.

gracias

Última edición por gnzsoloyo; 19/05/2013 a las 15:13
  #10 (permalink)  
Antiguo 19/05/2013, 13:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

¿Has probado sin el filtro con WHERE? No será necesario, pues ya le estás indicando cuál es el cod, el 304.
Lo que te recomendó leornardo fue algo así
Código MySQL:
Ver original
  1. SET @mitad = 304;
  2.  
  3. SELECT T.cod, T.nombre FROM
  4. ( SELECT cod, nombre
  5. FROM fotos
  6. ORDER BY ABS(cod - @mitad) LIMIT 7) T
  7. ORDER BY T.cod DESC;
  #11 (permalink)  
Antiguo 20/05/2013, 08:57
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: como hacer una consulta y que de un resultado en medio de dos parametros

ya lo solucione y si el filtro tambien es necesario y que necesito solo ver las fotos de ese libro y el codigo es como el de arriba que puse :D solo que el codigo no era ese (mucho torpe :P ) gracias muchachos

Código MySQL:
Ver original
  1. SELECT cod, nombre FROM
  2. (  SELECT cod, nombre
  3. FROM fotos
  4. WHERE libro='173'
  5.  ORDER BY ABS(cod - 302) LIMIT 7) T

y si ya salio bn gracias sali de un problema y llego otro pero ya no es bd

Etiquetas: medio, parametros, resultado, select
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 06:02.