Un problema muy común es generar una serie de registros y para luego mostrarlos en un front end, estos registros pueden ser una tabla con imagens, usuarios productos, etc. El problema consiste en que una vez que mostramos uno de estos productos queremos agregar dos botones uno para ver el registro siguiente y otro para el anterior. y uno diria bueno todo bien hago una consulta preguntado cual es el id proximo mas grande en el caso de estar buscando el siguiente registro de la siguiente forma:
1 2 3 | SELECT field1 FROM tabla WHERE id = ($idActual + 1) |
Y el anterior seria lo mismo
1 2 3 | SELECT campo FROM tabla WHERE id = ($idActual - 1) |
Hasta Acá todo bien , el problema surge cuando eliminamos un registro y nuestros id salta. por ejemplo eliminamos el registro 26 y nuestro registro actual es el 27. mysql no va a encontrar el registro numero 26 ($idActual – 1) y va a devolver una fila vacÃa.
La solución es bien simple:
En vez de usar el operador = para encontrar el id exacto que estamos buscando y luego sustraerle uno, lo que vamos a hacer es seleccionar todos los registros menores a nuestro registro actual usando el operador < y limitando el resultado a uno. De forma que para encontrar el próximo menor nos quedarÃa de la siguiente manera:
1 2 3 4 5 | SELECT campo FROM tabla WHERE ID < $idActual ORDER BY id DESC LIMIT 1 |
y para el registro mayor:
1 2 3 4 5 | SELECT campo FROM tabla WHERE ID > $idActual ORDER BY id ASC LIMIT 1 |
Espero que les sea útil.
Muchas veces los formularios de resgitro pueden ser intimidantes con la cantidad de campos que no piden, y como desarolladores y fanacticos de la usabilidad siempre intentamos brindar una mejor experiencia de usuario. Y para evitar esa apabullante sensación a nuestro usuario lo que podemos hacer es un formularios por pasos donde primero le pidamos dos cosas y si estan bien sigamos con otras tres, todas distribuidas coherentemente tipo: datos de usuario email, usuario y contraseña; luego datos de contacto, direccion y telefonos, y luego extras.