FAQ
Buenas!, en esta ocasion los molesto para ver si me pueden dar otra mano de
las tantas que me dieron. Estoy mostrando un consulta de mysql de unas
referencias con sus direcciones y numeros telefonicos y tengo un link donde
muestro esa referencia mas en detalle (muestro mas datos). Lo que quiero
hacer es poder pasar al siguiente o al anterior desde ahi y no se como
hacerlo.


Gracias a todos los que puedan ayudarme.

Saludos.
Ezequiel Suarez

Search Discussions

  • Satyam at Apr 4, 2007 at 8:36 am
    Esa es toda una historia y no es fácil. Hay muchas variaciones.

    Nota que, por ejemplo, los buscadores no te ofrecen anterior y siguiente,
    tienes que volver a la página de resultados, pues posiblemente esté cacheada
    y se regenere rapido, y de allí puedes ir a cualquiera, no necesariamente
    los contiguos.

    Primero tienes que evaluar cuanto se usa la facilidad y cuanto te cuesta.
    Si no es usada con mucha frecuencia, lo mejor puede ser que el usuario
    vuelva al listado.

    Si el anterior o posterior tienen una lógica facil de deducir, entonces no
    hay mucho problema. Supongamos que en un lsitado solo pudiera haber un
    registro por fecha:

    Anterior:
    select ....... where fecha < $fechaActual order by fecha desc limit 1
    Posterior
    select .... where fecha > $fechaActual order by fecha limit 1

    Si pudiera haber más de un registro por fecha, la condición será un poco más
    complicada, pues necesitas encontrar uno de la misma fecha, pero que no sea
    el mismo que ya tienes, pero una vez que pasas a este, tendras que aceptar
    uno que pueda ser de la misma fecha pero que no se ninguno de los
    anteriores. La condicion depende de la estructura de tus tablas, no puedo
    darte un ejemplo.

    Si el listado fuera mas dificil, te conviene insertar en una tabla auxiliar,
    indexado por el session ID o mejor el login de usuario, con las referencias
    a la búsqueda, en el orden en que quieras mostrarla. De esta forma podrás
    avanzar y retroceder con facilidad sin tener que rehacer la búsqueda. Si
    indexas las referencias por el id de sesión tendrás que limpiar la tabla
    cada tanto. Si lo haces por usuario, cada nueva consulta limpiará las
    anteriores y el número de registros se mantendra estable. Asi pues,
    necesitarás al menos tres campos, un autonumérico que le de a los registros
    un orden, un campo que represente el ID del usuario o de la sesion y el/los
    campos con las referencias a los registros a mostrar.

    Satyam


    ----- Original Message -----
    From: "Ezequiel Suarez" <esuarez@laanonima.com.ar>
    To: <php-es@lists.php.net>
    Sent: Tuesday, April 03, 2007 10:10 PM
    Subject: [PHP-ES] Anterior y Siguiente

    Buenas!, en esta ocasion los molesto para ver si me pueden dar otra mano
    de
    las tantas que me dieron. Estoy mostrando un consulta de mysql de unas
    referencias con sus direcciones y numeros telefonicos y tengo un link
    donde
    muestro esa referencia mas en detalle (muestro mas datos). Lo que quiero
    hacer es poder pasar al siguiente o al anterior desde ahi y no se como
    hacerlo.


    Gracias a todos los que puedan ayudarme.

    Saludos.
    Ezequiel Suarez

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php



    --
    No virus found in this incoming message.
    Checked by AVG Free Edition.
    Version: 7.5.446 / Virus Database: 268.18.25/743 - Release Date:
    02/04/2007 16:24
  • Martin Alterisio at Apr 4, 2007 at 7:46 pm
    El día 3/04/07, Ezequiel Suarez escribió:
    Buenas!, en esta ocasion los molesto para ver si me pueden dar otra mano
    de
    las tantas que me dieron. Estoy mostrando un consulta de mysql de unas
    referencias con sus direcciones y numeros telefonicos y tengo un link
    donde
    muestro esa referencia mas en detalle (muestro mas datos). Lo que quiero
    hacer es poder pasar al siguiente o al anterior desde ahi y no se como
    hacerlo.


    Gracias a todos los que puedan ayudarme.

    Saludos.
    Ezequiel Suarez

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php
    Preguntaron algo similar pero más complejo en la lista general, y hubo una
    fuerte discusión de que no se podía, que era ineficiente, que era
    complicado, etc, etc. Antes que llegue a esto voy a tratar de darte la
    solución que dí en esa ocasión (que es la que usé para un caso como éste).

    Lo primero que necesitas es ordenar tu lista de referencias de forma
    deterministica, esto significa que vos estas completamente seguro de como es
    el orden de los elementos. Una buena forma de lograr esto es usar la primary
    key, o algun campo unique como orden.

    Luego, puedes usar los campos de ordenamiento en la condiciones de un query
    para obtener unicamente aquellos que estan antes, o unicamente aquellos que
    estan despues del registro en el que estas parado. Limitando el query a un
    registro y ordenando de la misma manera podes obtener el registro siguiente.
    Para el registro anterior tenes que invertir el orden.

    Por ejemplo:

    Sql del listado:
    SELECT *
    FROM tabla
    ORDER BY id

    Sql para obtener el siguiente:
    SELECT *
    FROM tabla
    WHERE id > id_registro_actual
    ORDER BY id
    LIMIT 1

    Sql para obtener el anterior:
    SELECT *
    FROM tabla
    WHERE id < id_registro_actual
    ORDER BY id DESC
    LIMIT 1

    ----

    Si queres agregar otros campos en el orden es un poquito mas complejo:

    Sql del listado:
    SELECT *
    FROM tabla
    ORDER BY nombre, id

    Sql para obtener el siguiente:
    SELECT *
    FROM tabla
    WHERE nombre > nombre_registro_actual
    OR (nombre = nombre_registro_actual AND id > id_registro_actual)
    ORDER BY nombre, id
    LIMIT 1

    Sql para obtener el anterior:
    SELECT *
    FROM tabla
    WHERE nombre < nombre_registro_actual
    OR (nombre = nombre_registro_actual AND id < id_registro_actual)
    ORDER BY nombre DESC, id DESC
    LIMIT 1

    Espero te haya sido útil en algo.

    Saludos
  • Jidntt at Apr 5, 2007 at 12:31 pm
    Hola,
    Por lo que entiendo de tu mail lo que vos queres hacer es paginar una serie
    de registros.
    Si esto es asi te comento como lo solucione yo con MySQL en varias
    ocasiones.
    La idea es tener el número de paginas totales, osea tenes que saber cuantos
    registros tenes y de cuantos registros es la página.
    Por ejemplo si tenes 200 registros y las páginas son de 20 registros tenes
    200/20 paginas, o sea 10. Esto te sirve para saber si pones link de
    siguiente ó anterior.
    Yo por lo general usaba una variable que me pasaba por Get para saber en que
    página estaba y si era la primera vez que entraba esta variable no existia.
    Por ejemplo
    if(isset($_GET['pagina']))
    $pagina = $_GET['pagina'];
    Else
    $pagina = 1;

    Luego para hacer la consulta en mysql usas el "limit" que te permite decirle
    a la consulta desde donde devolver y con qué offset.
    Por ejemplo limit 0,20 te devolveria los primeros 20 registro, la segunda
    página seria limit 20,20 te devolveria los registros del 20 al 40
    Cualquier cosa fijate aca lo del limit que esta bien explicado
    http://dev.mysql.com/doc/refman/5.0/en/select.html

    En mi experiencia esto funciona bien pero acordate siempre de poner en el
    Quero el mismo ORDER BY porque sino te sale para atrás :p

    Por cierto esto no se puede hacer con SQL porque no tiene limit, aunque si
    se puede paginar, pero solo como te explicaron antes.

    Saludos

    Pablo


    -----Mensaje original-----
    De: Ezequiel Suarez
    Enviado el: Martes, 03 de Abril de 2007 05:10 p.m.
    Para: php-es@lists.php.net
    Asunto: [PHP-ES] Anterior y Siguiente

    Buenas!, en esta ocasion los molesto para ver si me pueden dar otra mano de
    las tantas que me dieron. Estoy mostrando un consulta de mysql de unas
    referencias con sus direcciones y numeros telefonicos y tengo un link donde
    muestro esa referencia mas en detalle (muestro mas datos). Lo que quiero
    hacer es poder pasar al siguiente o al anterior desde ahi y no se como
    hacerlo.


    Gracias a todos los que puedan ayudarme.

    Saludos.
    Ezequiel Suarez

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php






    __________________________________________________
    Preguntá. Respondé. Descubrí.
    Todo lo que querías saber, y lo que ni imaginabas,
    está en Yahoo! Respuestas (Beta).
    ¡Probalo ya!
    http://www.yahoo.com.ar/respuestas

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedApr 3, '07 at 8:08p
activeApr 5, '07 at 12:31p
posts4
users4
websitephp.net

People

Translate

site design / logo © 2021 Grokbase