Obtener el anterior y siguiente registro de una tabla MySQL con PHP

Muchas veces queremos obtener el anterior o siguiente registro de una tabla por mas que tengamos por id autonumérica podemos tener un salto de id por ejemplo tenemos este orden 1,2,4,7,10 el 1 y 2 podemos obtener fácilmente sumando +1 0 -1 al id actual pero que pasa si del 2 queremos el sgte si sumamos +1 tendremos 3 pero en nuestra tabla no existe ese id, una solución no muy saludable seria con un ciclo do while ejecutar 1 vez y luego seguir ejecutando sumando +1 hasta encontrar una fila pero no es la mas adecuada y navegando por la red he encontrado una sintaxis sql que me ha funcionado sin problemas y espero que les sirva.

Obtener el registro anterior.
SELECT id
FROM mi_tabla
WHERE id < $id_archivo
ORDER BY id DESC
LIMIT 1;

Bueno como verán la sintaxis es muy sencilla y fácil de entender donde $id_archivo es la variable del id actual y le decimos seleccionar la fila con el id menor a $id_archivo y ordenar por el mayor y muéstrame solo una fila.
En nuestro ejemplo si estamos en la id 4 el anterior nos devolverá el id 2.

Obtener el registro siguiente.
SELECT id
FROM mi_tabla
WHERE id > $id_archivo
ORDER BY id ASC
LIMIT 1;

La consulta es parecida a la anterior donde la variable $id_archivo es la id actual y le decimos seleccionar la fila con el id mayor a $id_archivo y ordenar por el menor y muéstrame solo una fila.
En nuestro ejemplo si estamos en la id 4 el siguiente nos devolverá el id 7.

Comentarios

  1. como hago para obtener el codigo que esta actualmente

    ResponderBorrar
  2. y el codigo del id que tenes actualmente lo podes obtener de varias maneras dependiendo de tu programacion si lo estas pasando por parametros en links podes obtener con $_GET ejemplo $id = $_GET['id_archivo']; o tambien con el metodo post eso ya depende de como quieras pasar el id espero haberte aclarado tu duda.

    ResponderBorrar
  3. lo he probado y me funciona pero cuando llega al ultimo registro la variable se queda vacía y muestra errores, no vuelve al principio de los registros... sabes como puedo hacer para que pare en el ultimo registro y no me muestre los errores

    ResponderBorrar
  4. juliana me podrias pasar tu codigo para mirarlo asi te podria ayudar.

    ResponderBorrar
  5. $ssql = "select campo from tabla where campo > $id_campo order by campo asc limit 1";
    $cuer = mysql_query($ssql);
    $agua = mysql_fetch_array($cuer);
    $next = $agua['campo'];
    if ($next != ""){
    echo ' anterior ';
    }
    $ssql = "select campo from tabla where campo < $id_campo order by campo desc limit 1";
    $cuers = mysql_query($ssql);
    $aguas = mysql_fetch_array($cuers);
    $nexts = $aguas['idoferta'];
    if ($nexts != ""){
    echo ' siguiente ';
    }

    //asi logré que parara ... pero quisiera saber el código para que vuelva a empezar... osea después del ultimo registro encontrado vuelva al primer registro... ?¿

    ResponderBorrar
  6. ya y lo que se me ocurre es consultar cual es el ultimo registro y comparar con el siguiente:

    $sql = "select campo from tabla order by campo desc limit 1";
    $row = mysql_fetch_assoc(mysql_query($sql));
    $campo = $row['campo'];

    if($campo == $nexts){
    echo 'id campo es igual al ultimo registro';
    }

    ResponderBorrar
  7. Muchimas gracias adadte un poco tu script para algo mio y me funciono de marravilla gracias

    ResponderBorrar
  8. Soy bastante reciente en PHP y gracias macho, no me acordaba que también podía usar operadores aritméticos en las lineas SQL, he estudiado tanto PHP, que me tocaría apreciar un poco más SQL, gracias!

    ResponderBorrar
  9. Wynn Slots for Android and iOS - Wooricasinos
    A free app for slot machines jancasino.com from WRI Holdings Limited that worrione lets you play the wooricasinos.info popular games, such as free video slots, table games 토토 사이트 모음 and live poormansguidetocasinogambling casino

    ResponderBorrar
  10. Bravo, bravo, bravísimo!!! ¡Qué grande eres!
    Muchísimas gracias por tu aporte.

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Cargar dinamicamente un DropDownListBox con PowerBuilder