Usando el botón para iterar a través del conjunto de resultados de mysql usando php

Hola gente, como una nueva programación web, tengo un escenario y necesito ayuda.

Estoy tratando de tener un botón 'siguiente' en la página que extraerá la siguiente pregunta de la base de datos de manera iterativa. Estoy pasando valores php directamente al botón como texto.

Actualmente puedo tomar el conjunto de resultados de mysql e imprimirlos todos o puedo tomar solo una fila y devolver sus campos, pero ¿cuál es la estrategia para tomar uno con el siguiente botón, luego otro, y así sucesivamente?

$result = mysql_query("SELECT * FROM $DB_QUEST_NAME ORDER BY pk_Id DESC;") or die(mysql_error());

    while ($row = mysql_fetch_array($result)){

    echo $pk_id = $row[0] . "<br>";
    echo $question = $row[1].  "<br>";
    echo $answera = $row[2]  .  "<br>";
    echo $answerb = $row[3] . "<br>";
    echo $answerc = $row[4] . "<br>";
    echo $answerd = $row[5] . "<br><br>";

    break;  
    }

En el marcado, incluya getNextPoll.php (arriba) que toma el primer resultado para mostrarlo como botón. pero con cada clic subsiguiente quiero obtener el siguiente, luego el siguiente y así sucesivamente. Sé cómo configurar los textos de los botones y también soy consciente de las responsabilidades del lado del cliente del lado del servidor, pero como soy bastante nuevo en este tipo de desarrollo, la metodología detrás de él es un poco complicada.

Cualquier comentario sería apreciado. Gracias.

preguntado el 10 de mayo de 11 a las 13:05

4 Respuestas

Creo que estas buscando "Desplazamiento" de MySQL. Esto le permite ejecutar una consulta como ... limit 1 offset 0 para devolver el primer resultado, luego ... limit 1 offset 1 para devolver el segundo resultado ... y así sucesivamente.

(Realmente no necesitas "offset 0", ya que ese es el valor predeterminado de todos modos, pero, solo intento ilustrar el punto).

EDIT:

Si almacena la variable de página en la URL de esta manera: www.myPage.com/questions.php?pg=2

Entonces puedes hacer esto:

$numPerPage = 1;
$pg = $_GET['pg'];
$nxtPage = $pg++;
$offset = ($numPerPage * $pg) - 1;
$question = mysql_query("SELECT * FROM questions LIMIT " . $numPerPage . 
" OFFSET " . $offset);

Entonces, el enlace "siguiente" podría ser:

<a href="questions.php?pg=<?=$nxtPage?>">NEXT</a>

contestado el 10 de mayo de 11 a las 17:05

La consulta que mencionaste devolverá 10 resultados comenzando en el décimo resultado, entonces, mostraría 10, 10, 11 ... 12 Sugiero mantener la variable "pregunta" en la URL: www.myPage.com?q=19 Entonces , su consulta puede compensarse con el valor de $ _GET ['q'] ¿Tiene sentido? ¿O entendí mal su comentario-pregunta? - David

Gracias chicos. Offset es nuevo para mí. Sin embargo, estaba usando el límite en algunos otros scripts, pero en este lo eliminé para que todo el conjunto de resultados se repita. bien, si estoy usando llamadas posteriores al script php que contiene el 'SELECT column FROM table LIMIT 1 OFFSET 1' declaración, ¿cómo me aseguraré de que la próxima llamada saque la siguiente fila y no comience de nuevo desde el principio (dándome siempre la primera pregunta)? ¿Es mejor envolver la declaración dentro de una función o algo así? luego llámelo de alguna manera desde la activación de un botón "siguiente" html. - L-Samuels

Además, Andre tiene una línea mejor para la variable $ pg: comprueba si existe, y si no, establece $ pg en 1 de forma predeterminada: $ page_number = isset ($ _ GET ['page'])? $ _GET ['página']: 1; - David

Puede utilizar LIMIT para su consulta

Ejemplo obteniendo los primeros 10 resultados:

"SELECT * FROM $DB_QUEST_NAME ORDER BY pk_Id DESC LIMIT 1,10";

Para obtener el siguiente, simplemente multiplique por el número de página:

$page_number = isset($_GET['page']) ? $_GET['page'] : 1;
$results_per_page = 10;
$end = $results_per_page * $page_number;
start = $end - $results_per_page;

"SELECT * FROM $DB_QUEST_NAME ORDER BY pk_Id DESC LIMIT {$start},{$end}";

Este es solo un ejemplo básico. Para una implementación real, use offset, como otros han explicado

contestado el 10 de mayo de 11 a las 17:05

Sus $DB_QUEST_NAME La mesa también debe tener un ord columna donde establece el orden de sus preguntas (no lo basaré en la clave principal: ¿qué pasa si luego desea agregar una nueva pregunta como la primera?)

Entonces next el botón debe consultar $ord + 1 (Si alguna).

contestado el 10 de mayo de 11 a las 17:05

De acuerdo, gracias @neurone, lo buscaré. Ese es un punto valido. Solo estaba codificando para poner en funcionamiento la funcionalidad rápidamente como parte de un proyecto de aprendizaje. - L-Samuels

Utilice "Desplazamiento" y "Límite" en la consulta. Cheque: http://www.petefreitag.com/item/451.cfm para un ejemplo simple.

contestado el 10 de mayo de 11 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.