Foros del Web » Programando para Internet » PHP »

Obtener id anterior y siguiente

Estas en el tema de Obtener id anterior y siguiente en el foro de PHP en Foros del Web. Supongamos que hacemos una consulta a la db y seleccionamos datos por medio de una id Como podria obtener el id que esta antes del ...
  #1 (permalink)  
Antiguo 19/02/2011, 17:28
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 16 años, 2 meses
Puntos: 9
Obtener id anterior y siguiente

Supongamos que hacemos una consulta a la db y seleccionamos datos por medio de una id

Como podria obtener el id que esta antes del que estoy usando y el que le sigue?

esto vendria siendo como el sistema de post anterior y el siguiente en wordpress..

Alguna idea?
  #2 (permalink)  
Antiguo 19/02/2011, 17:33
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Obtener id anterior y siguiente

creo que tu mismo te estas dando la respuesta hablando de las id o no?? si el id del primer post es 0 la segunda id cual seria??? sencillamente colocando un link con la id siguiente podrias obtenerlo o no?? claro tendrias que validar cual es el ultimo y cual el primero para que ahi no halla anterior ni siguiente, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 19/02/2011, 17:43
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años, 6 meses
Puntos: 9
Respuesta: Obtener id anterior y siguiente

Fácil, trabajando en forma de array.

Con una función que te devuelve la posición en la que se encuentra un determinado "slug" o "id" de algo (ya sea una noticia para wordpress o cualquier otra cosa)

Una vez sacado "la key" del array por ejemplo

Código PHP:
Ver original
  1. $arrConLosSlugsDeNoticias;   // Array con los ids o slugs de las noticias
  2.  
  3. $noticiaWordPress = sacarUnaNoticia (  $arrConLosSlugsDeNoticias[$key] );
  4.  
  5. /**
  6.  * Noticia anterior
  7.  */
  8. $noticiaWordPressA = sacarUnaNoticia ( $arrConLosSlugsDeNoticias[$key-1] );
  9.  
  10. /**
  11.  * Noticia Siguiente
  12.  */
  13. $noticiaWordPressS = sacarUnaNoticia ($arrConLosSlugsDeNoticias[$key+1] );


Por ejemplo...
__________________
Debian Squeeze rules!
  #4 (permalink)  
Antiguo 19/02/2011, 18:11
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 16 años, 2 meses
Puntos: 9
Respuesta: Obtener id anterior y siguiente

Siguiente:
$consulta = $db->query("SELECT id FROM fotos WHERE id > $id_actual ORDER BY id ASC LIMIT 1");

Anterior:
$consulta = $db->query("SELECT id FROM fotos WHERE id < $id_actual ORDER BY id DESC LIMIT 1");
  #5 (permalink)  
Antiguo 19/02/2011, 18:29
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Obtener id anterior y siguiente

Interesante solucion te funciono?? imagino que si por la logica de la sentencia, pero creo que la respuesta al estilo wordpress es que tengas una pagina para tus post y que por medio de la url indiques cual es por eso te decia lo de tener un link con anterior y uno con siguiente, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 19/02/2011, 18:39
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 5 meses
Puntos: 416
Respuesta: Obtener id anterior y siguiente

No necesariamente porque estes en el ID 10 (por ejemplo), significa que el anterior y el siguiente seran 9 y 11, respectivamente.
Recuerda que si borras un registro en una base de datos con un campo autoincremental, ese ID no se vuelve a usar, osea, si tienes los siguientes IDs:

1 2 3 4 5 6 7 8 9 10 11 12

Y borras el 2 9 11 y 12, cuando vuelvas a insertar algo, no tomara el ID 11 sino el 13.
Por lo que si estas en el registro 10, el proximo seria 13 y el anterior 8.
He alli el problema ... Por eso la solucion que da ColdFusion a su problema, es la mejor.
Claro, yo lo haria de otra forma para evitar tener que hacer esas 2 consultas en cada pagina (por cuestiones de rendimiento)
  #7 (permalink)  
Antiguo 19/02/2011, 18:46
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Obtener id anterior y siguiente

Cita:
Iniciado por Ronruby Ver Mensaje
No necesariamente porque estes en el ID 10 (por ejemplo), significa que el anterior y el siguiente seran 9 y 11, respectivamente.
Recuerda que si borras un registro en una base de datos con un campo autoincremental, ese ID no se vuelve a usar, osea, si tienes los siguientes IDs:

1 2 3 4 5 6 7 8 9 10 11 12

Y borras el 2 9 11 y 12, cuando vuelvas a insertar algo, no tomara el ID 11 sino el 13.
Por lo que si estas en el registro 10, el proximo seria 13 y el anterior 8.
He alli el problema ... Por eso la solucion que da ColdFusion a su problema, es la mejor.
Claro, yo lo haria de otra forma para evitar tener que hacer esas 2 consultas en cada pagina (por cuestiones de rendimiento)
Interesante explicación y toda la razon en lo que dices
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 19/02/2011, 20:34
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años, 6 meses
Puntos: 9
Respuesta: Obtener id anterior y siguiente

Por eso mismo, en mi array la cosa queda así:
Código PHP:
Ver original
  1. $arrConLosSlugsDeNoticias = array (
  2. 0 => 'una-noticia-1',
  3. 1 => 'una-noticia-3  (la 2 fue borrada por ejemplo)',
  4. 2 => 'una-noticia-4'
  5. );


Y con una función que devuelva la posición, pasándole el valor ( 'una-noticia-4' devolvera 2

Y jugar a raiz de eso no?

Habrá varias soluciones, en ese momento opté por esta.

Un saludo.
__________________
Debian Squeeze rules!

Etiquetas: siguiente, anteriores
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 11:25.