miércoles, 31 de agosto de 2011

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 autonumerica podemos tener un salto de id por ejemplo tenemos este orden 1,2,4,7,10 el 1 y 2 podemos obtener facilmente 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 solucion 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;


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 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.

9 comentarios:

  1. como hago para obtener el codigo que esta actualmente

    ResponderEliminar
  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.

    ResponderEliminar
  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

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

    ResponderEliminar
  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... ?¿

    ResponderEliminar
  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';
    }

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

    ResponderEliminar
  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!

    ResponderEliminar