Lo que quiero: buscar la información en el sitio y paginarla... No importa cuánto lo intentes, no podrás paginar la información que obtienes. Este es el consejo del experto.
Por supuesto que está en la base de datos. ¿De lo contrario?
1. Prólogo
La visualización de paginación es un método muy común para navegar y mostrar grandes cantidades de datos, y es uno de los eventos más comúnmente procesados en la programación web. Para los veteranos de la programación web, escribir este tipo de código es tan natural como respirar, pero para los principiantes, este problema suele ser confuso, por lo que escribí especialmente este artículo para explicar este problema en detalle, para que los amigos que hayan leído este artículo después Al leer esto, comprenderá el principio y el método de implementación de la visualización de paginación. Este artículo es adecuado para que lo lean principiantes y todos los códigos de muestra están escritos en PHP.
2. Principio
La llamada visualización de paginación consiste en dividir artificialmente el conjunto de resultados en la base de datos en segmentos para su visualización. Aquí se requieren dos parámetros iniciales:
Cada ¿Cuántos registros hay en la página ($PageSize)?
¿Qué página es ($CurrentPageID)?
Ahora dame otro conjunto de resultados y podré mostrar un resultado específico.
En cuanto a otros parámetros, como: $PreviousPageID, $NextPageID, número total de páginas ($NUMBER página), etc., podemos obtenerlos en base a lo anterior.
Tome la base de datos MySQL como ejemplo. Si desea interceptar cierto contenido de la tabla, la declaración SQL puede ser: seleccione * del desplazamiento del límite de la tabla, filas. Eche un vistazo al siguiente conjunto de declaraciones SQL e intente encontrar regularidad.
Los primeros 10 registros: seleccione * de la tabla límite 0, 10.
Registros del 11 al 20: seleccione * de la tabla límite 10, 10.
Registros 21 al 30: Seleccione * de la tabla límite 20, 10.
......
Este conjunto de declaraciones SQL es en realidad una declaración SQL para obtener datos para cada página de la tabla cuando $PageSize=10. Podemos resumir dicha plantilla:
seleccione * del límite de la tabla ($ current pageid-1)* $PageSize, $ PageSize
Coloque esta plantilla en el valor correspondiente y compárela con Compare el conjunto anterior de declaraciones SQL para ver si este es el caso. Después de resolver el problema más importante de cómo obtener los datos, el trabajo restante es pasar los parámetros, construir la declaración SQL adecuada y luego usar PHP para obtener los datos de la base de datos y mostrarlos. A continuación utilizo un código específico para explicar.
3. Código simple
Lea atentamente el siguiente código, depurelo y ejecútelo usted mismo. Es mejor modificarlo una vez y agregar funciones usted mismo, como la búsqueda.
<? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)
//Establecer una conexión a la base de datos
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
o die("No se puede conectar:".
MySQL _ error());
//Obtener el número de página actual
if(isset($ _ GET[' page ']){
$ página = intval($ _ GET[' página ']);
}
En caso contrario {
$ página = 1;
}
//Número de páginas
$ PageSize = 10;
//Obtener el volumen total de datos
$sql = " seleccione count(* ) como cantidad en la tabla";
$ resultado = MySQL_query($SQL);
$ fila = MySQL_fetch_row($resultado);
$ monto = $ fila[' monto '];
//Cuenta cuantas páginas hay en total
Si (monto){
if ($amount & lt;$page_size){$page_count = 1;}//Si la cantidad total de datos es menor que $PageSize, solo hay una página
If( $amount% $page_size. ){ //Dividimos la cantidad total de datos por el resto de cada página
$ page_count =(int)($cantidad/$page_size)+1; un resto, luego página El número es igual a los datos totales divididos por el resultado de cada página, redondeado hacia arriba y sumado por 1. De lo contrario {
$ página_recuento = $ cantidad/$ página_tamaño. ; // Si no, entonces el número de páginas es igual a la cantidad total de datos dividida por el número de páginas.
De lo contrario, {
$ page_count. 0;
}
//Enlace para pasar de página
$ page _ string = ""
if( $page = =; 1 ){
$page_string. = 'Primera página|Página anterior|';
}
En caso contrario{
$page_string. = ' & lta href="/?page=1>; primera página
}
if(($página = = $page_count)| |( $page_count == 0) ){
$page_string. = 'Página siguiente|Última página';
}
En caso contrario {
$page_string. = ' & lta href="/?Página = '."($página+1). & gtPágina siguiente
}
//Obtiene datos y devuelve el resultado en formato de matriz bidimensional.
if (cantidad){
$ SQL = "select * from table order by id desc limit". ($página-1)*$tamaño_página. ", $ tamaño de página ";
$ resultado = MySQL _ consulta($ SQL
mientras($ fila = MySQL _ fetch _ fila($ resultado)){
$ conjunto de filas[]= $ fila;
}
}else{
$ conjunto de filas = matriz();
}
//El código que no muestra resultados no está dentro del alcance de la discusión. Simplemente use foreach para mostrar simplemente el resultado con la matriz 2D obtenida.
& gt
4. Código de estilo OO
Se utiliza la conexión de base de datos en el siguiente código.
<? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)
//Nombre de archivo: Pager.class.php
//La clase de paginación solo se usa para procesar estructuras de datos y no responsable del procesamiento del espectáculo.
Buscapersonas de clase
{
var $ PageSize//Número de páginas
var $CurrentPageID//Número de páginas actuales p >
var $NextPageID//Página siguiente
var $PreviousPageID//Página anterior
var $ numPages//Número total de páginas
var $ numItems//Número total de registros
var $ isFirstPage//¿Es esta la primera página?
var $ isLastPage//¿Es esta la última página?
var $ sql//sentencia de consulta sql
Función buscapersonas ($ opción)
{
Global $ db
$ this-& gt ;_ set options($ option);
//Número total de artículos
if (!isset($this->numItems))
{
$RES = $d B->Query($this->SQL);
$this->numItems = $RES->numRows( );
}
//Número total de páginas
If ($ this-& gt; numItems & gt0 )
{
If ($this->numItems<$this->PageSize){ $this->numPages = 1;}
If ($this-> >numItems % $this- >Tamaño de página)
{
$this->numPages =(int)($this->numItems/$this ->PageSize)+1; p>
}
Otro
{
$ this->numPages = $this ->numItems/$this->Tamaño de página ;
}
}
Otro
{
$this->numPages = 0;
}
Cambiar($this->CurrentPageID)
{
case $this->numPages == 1:
$this->isFirstPage = true
$this->isLastPage = true
p>Rotura;
Caso 1:
$ this->isFirstPage = true
$this->isLastPage = false
Rotura;
case $this- >número de página:
$this->isFirstPage = false
$this ->isLastPage = true
Pausa;
Valor predeterminado:
$ this->isFirstPage = false
$ this->isLastPage = false
}
if ($ this->numPages & gt1 )
{
if(! $ésimo
es->isLastPage){ $this->siguiente pageid = $this->pageid actual+1;}
if (! $this->isFirstPage){ $this ->anterior pageid = $this->pageid actual-1;}
}
return true
}
/***
*
*Devuelve la conexión de la base de datos del conjunto de resultados
*Cuando el conjunto de resultados es relativamente grande, puede utilizar este método directamente para obtener la conexión de la base de datos. y luego atravesar fuera de la clase, la sobrecarga es relativamente pequeña.
*Si el conjunto de resultados no es muy grande, puede utilizar directamente getPageData para obtener los resultados en formato de matriz bidimensional.
El método getpagedata también llama a este método para obtener los resultados.
*
***/
Función getDataLink()
{
Si ($ esto- >numItems)
{
$db global
$PageID = $this->CurrentPageID
$ de = ($ PageID-1)* $this->tamaño de página;
$ recuento = $this->tamaño de página;
$ enlace = $d B-& gt;limitar consulta( $this->sql,$from,$count);//Utilice el método Pear DB::limitQuery para garantizar la compatibilidad de la base de datos.
devolver enlace $
}
Otro
{
devolver falso
}
}
/***
*
*Devuelve el conjunto de resultados en el formato de una matriz bidimensional.
*
***/
Función getPageData()
{
Si ($ esto- >numItems)
{
if($RES = $this->getDataLink())
{
si( $RES->numRows())
{
mientras($row = $RES->fetchRow())
{
$ resultado[]= $ fila;
}
}
Otro
{
$ resultado = matriz();
}
Devolver $ resultado
}
Otros
{
Devuelve falso
}
}
Otros
{
Devuelve falso
}
}
función _setOptions($opción)
{
$allow_options = matriz( p>
Tamaño de página',
'ID de página actual',
sql',
numItems
);
foreach($ opción como $clave = > valor en dólares)
{
if (in_array($clave, $allow_options)&&($valor!= null))
{
$ this->$ clave = $valor
} p>
}
Devuelve verdadero
}
}
& gt
& lt? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)
//Nombre de archivo: test_pager.php
//Este es un código de muestra simple, omitiendo el uso de la clase pear db Código para establecer conexión a la base de datos.
Requiere "buscapersonas. clase. PHP"
if (isset($_GET['page']))
{
$ página =(int)$ _ GET[' página '];
}
Otro
{
$ página = 1;
}
$ SQL = " seleccionar * del orden de la tabla por id ";
$pager_option = array(
" SQL " = >; $sql,
" PageSize " = & gt10,
" CurrentPageID " = & gt$page
);
if ( isset($_GET['numItems']))
{
$ buscapersonas _ opción[' numItems ']=(int)$ _ GET[' numItems '];
}
$ buscapersonas = @ nuevo buscapersonas($ buscapersonas _ opción);
$ datos = $ buscapersonas-& gt;obtener datos de página( );
if($pager-& gt;isFirstPage)
{
$Turnover = " Inicio | Anterior |
}
Otros
{
$Turnover= " & lta href= '? página=1. numItems = ".$pager->numItems.">Homepage
}
if ($pager->isLastPage)
{
volumen de negocios en USD. = "Página siguiente|Última página";
}
Otro
{
Volumen de negocios en USD. = " & lta href="/? página= ".$pager->NextPageID.&numItems= ". $pager->numItems. ”& gtPágina siguiente
}
& gt
Hay dos cosas a tener en cuenta:
Esta clase solo procesa datos. No es responsable del procesamiento y la visualización, porque creo que es un poco reacio a poner el procesamiento de datos y la visualización de resultados en una clase. Al mostrar, la situación y los requisitos son cambiantes, y es mejor manejarlos de acuerdo con los resultados proporcionados. clase. El método consiste en heredar una subclase de esta clase Pager para mostrar diferentes paginaciones. Por ejemplo, mostrar la lista de paginación del usuario puede:
& lt?
Clase MemberPager navegación de página extendida
{
Función showMemberList()
{
Global $ db
$data = $this->get pagedata();
//Código para mostrar los resultados.
//......
}
}
///Llamar
si ( isset($_GET['página']))
{
$ página =(int)$ _ GET[' página '];
}
Otro
{
$ página = 1
}
$ SQL = " seleccionar * de orden de miembros por id ";
$pager_option = array(
" SQL " = >;$sql,
" PageSize " = & gt10, p>
" CurrentPageID " = & gt$page
);
if ( isset($_GET['numItems']))
{
$ buscapersonas _ opción[' numItems ']=(int)$ _ GET[' numItems ']
}
$ buscapersonas = @ nuevo miembro; buscapersonas($ buscapersonas _ opción);
$ buscapersonas-& gt;mostrar lista de miembros();
& gt
La segunda cosa a tener en cuenta es La compatibilidad de diferentes bases de datos y la forma de interceptar un resultado en diferentes bases de datos son diferentes.
mysql: seleccione * del límite de tabla desplazamiento, fila
pgsql: seleccione * del límite de tabla m desplazamiento n
..... .
Entonces necesitas usar el método limitQuery de la clase pear db para obtener los resultados en la clase.
Vale, termina de escribir y termina el trabajo. Espero que no sientas que perder el tiempo leyendo estas palabras es una pérdida de tiempo.
Respuesta: ljpbxh 027-Protector Nacional Nivel 14 5-26 10:10.
<?
si (!$página)
{
$ página = 1
}
$ sqldo; = "seleccione recuento(*)como título de $ tzdyyinfo ";
$ resultado = MySQL _ consulta($ SQL do);
$ mensaje _ recuento = MySQL _ resultado($ resultado, 0, "título");
$ página _ recuento = ceil($ mensaje _ recuento/$ página _ tamaño
$ desplazamiento = ($ página-1) * $page_size;
$strdo="seleccione id,ybname,yblb,ybyy,ybip,ybzy,ybtime,ybinfo,ybtbadd de $tzdyyinfo ordenar por límite de descripción de tiempo Yb $offset,$page_ size ";
$result=mysql_query($strdo,$my conn);
while($ fila = MySQL _ fetch _ array($ resultado))
{
& gt
& lttable width = " 100% " border = " 0 " relleno de celda = " 0 " espaciado de celdas = " 0 " >>p>
& lttr & gt
& lttd & gt_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ & lt/TD & gt;
& lt/tr & gt;
& lt/table & gt;
& lt? } ?& gt
& lt?
//El siguiente es el código para la página anterior y la página siguiente.
if ($resultado)
{
$ página_anterior = $ página-1
$ página_siguiente = $; página+1;
echo" & ltp align=\"center\">.
| ";
if($ página & lt;=1){
Echo "Página 1|";
}
De lo contrario,{
Echo" & lta href='$PATH_INFO? page = 1 '>Primera página
}
if($ prev _ page & lt;1){
Echo "Anterior | "; p>
}
else{
echo "<a href='$PATH_INFO?page=$prev_page'>página anterior p>
}
if($next_page>$page_count){
Echo "página siguiente|";
}
De lo contrario {
Eco" & lta href='$PATH_INFO? página = $ siguiente _ página ' & gtpágina siguiente
}
if($ página & gt;=$page_count){
Echo "última página Página|
}
else{
echo" & lta href='$PATH_INFO? pagina = $ pagina _ recuento ' & gtultima pagina
}
}
& gt
Eso es todo.