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

[SOLUCIONADO] Obtener registro anterior y siguiente mediante SQL

Estas en el tema de Obtener registro anterior y siguiente mediante SQL en el foro de Mysql en Foros del Web. Buenas compañeros, Tengo una tabla "peliculas" con los campos id_pel, nombre y fechaestreno. Necesito obtener el registro anterior y siguiente al registro que estoy visualizando ...
  #1 (permalink)  
Antiguo 08/07/2013, 12:53
 
Fecha de Ingreso: julio-2013
Mensajes: 44
Antigüedad: 10 años, 9 meses
Puntos: 0
Obtener registro anterior y siguiente mediante SQL

Buenas compañeros,

Tengo una tabla "peliculas" con los campos id_pel, nombre y fechaestreno. Necesito obtener el registro anterior y siguiente al registro que estoy visualizando y no puedo usar id_pel, ya que las películas se muestran ordenadas alfabéticamente. Os pongo un ejemplo:

id_pel: 1, nombre: Al límite
id_pel: 2, nombre: Contraband
id_pel: 3, nombre: La red social
id_pel: 4, nombre: El lado bueno de las cosas

Si hago la siguiente consulta "SELECT * FROM peliculas ORDER BY nombre" obtengo el resultado que quiero:
- Al límite
- Contraband
- El lado bueno de las cosas
- La red social

Si estoy visualizando los datos de la película "Contraband" (id_pel: 2) y tengo un enlace para que me cargue el siguiente registro, debería saltar a la siguiente que es "El lado bueno de las cosas" (id_pel: 4)

He pensado hacerlo de la siguiente manera:
- "SELECT * FROM peliculas ORDER BY NOMBRE LIMIT 0, 1" (Así obtengo el registro anterior)
- "SELECT * FROM peliculas ORDER BY NOMBRE LIMIT 2, 1" (Así obtengo el registro siguiente)

El problema es que necesito saber la posición que ocupa en la tabla "películas" el registro que estoy visualizando, en este ejemplo "Contraband". Así, restándole uno a esa posición o sumándole uno podría mostrar el registro anterior o siguiente.

¿Cómo puedo obtener la posición?, ¿Se os ocurre otra forma?

Graciasss
  #2 (permalink)  
Antiguo 09/07/2013, 04:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Obtener registro anterior y siguiente mediante SQL

Si trabajas sin objetos casi que lo mas facil es esto

Código MySQL:
Ver original
  1. -- Así obtengo el registro anterior
  2. SELECT * FROM peliculas
  3. WHERE NOMBRE<"Contraband"
  4. ORDER BY NOMBRE DESC LIMIT 1;
  5. -- Así obtengo el registro siguiente
  6. SELECT * FROM peliculas
  7. WHERE NOMBRE>"Contraband"
  8. ORDER BY NOMBRE LIMIT 1;

Tienes que pasar el parametro del nombre la pelicula actual a script que te construya la query.

Depende de como estes programando, podrias usar objetos, hacer una sola consulta la la bbdd y luego recorrer el array resultante.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 09/07/2013, 06:46
 
Fecha de Ingreso: julio-2013
Mensajes: 44
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Obtener registro anterior y siguiente mediante SQL

Funciona perfectamente!

Muchas gracias!

Pensé que para obtener la posición puedo hacer una consulta, almacenar los valores de la consulta de id_pel en un array y luego con un while recorrerlo hasta llegar al valor de id_pel que quiero y así obtener la posición. Creo que es eso a lo que te refieres. ¿No existe otro método más sencillo?. Por ejemplo una sentencia en SQL que me de la posición...

De todas formas el SELECT que has propuesto me soluciona el problema

Gracias quimfv
  #4 (permalink)  
Antiguo 09/07/2013, 08:20
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, 5 meses
Puntos: 2658
Respuesta: Obtener registro anterior y siguiente mediante SQL

Cita:
¿No existe otro método más sencillo?
Existen diversas formas de hacerlo, pero para trabajar en SQL tienes que olvidarte de la lógica de programación. Las cosas no se hacen del mismo modo.
Trabajar con bases de datos, no es lo mismo que trabajar con lenguajes de programación (el SQL no lo es).
__________________
¿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: campo, mediante, registro, select, siguiente, sql, tabla
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 12:04.