Foros del Web » Programando para Internet » PHP »

Índice numérico que altera el LIMIT

Estas en el tema de Índice numérico que altera el LIMIT en el foro de PHP en Foros del Web. Tengo una página dinámica que imprime un campo u otro de mi base de datos segun se la llame desde un enlace en otra página ...
  #1 (permalink)  
Antiguo 23/12/2010, 11:32
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Índice numérico que altera el LIMIT

Tengo una página dinámica que imprime un campo u otro de mi base de datos segun se la llame desde un enlace en otra página de mi web.


El enlace que llama es así:


<a href="dinamica.php?id=nombre_campo">Paso de variable mediante $_GET</a>


Luego en la página dinamica.php tengo:


$id = mysql_real_escape_string($_GET['id']);

$sql = "SELECT * FROM tabla WHERE campo = '$id' ORDER BY id ASC LIMIT 0, 2";

$query = mysql_query($sql);

while($fila = mysql_fetch_assoc($query)) {
echo $fila['otro_campo'];


En otro hueco de esa misma página tengo:


$sql = "SELECT * FROM tabla WHERE campo = '$id' ORDER BY id ASC LIMIT 2, 5";

$query = mysql_query($sql);

while($fila = mysql_fetch_assoc($query)) {
echo $fila['otro_campo'];
}


Problema: que quiero que el número de resultados como se observa en el LIMIT no pase de 7 por página, así que para que se sigan imprimiendo los demas datos del campo nombre_campo he de crear un enlaces dentro de la página que sean como un índice numérico. Vamos como cuando vas recorriendo las páginas del foro dandole a los enlaces numerados 1, 2, 3, 4, 5...

Para ello me he dado cuenta de que tengo que introducir una variable en el valor de LIMIT y en apuntar el enlace hacia la propia página "sustitullendo los viejos valores de LIMIT 0, 2 y 2, 5. Pero resulta que para ello debería de haber colocado una variable en LIMIT desde el principio. Ahora que lo veo dos variables una para cada valor de LIMIT.


Sinceramente ¿mi idea va por el camino correcto?

Viendo el código ¿os parece que se deba de hacer así y en ese caso como hago para mandar dos variables y capturarlas con $_GET por separado?
  #2 (permalink)  
Antiguo 23/12/2010, 11:46
wjr
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Índice numérico que altera el LIMIT

Si necesitás 7, cambiá el "2,5" por "7"
  #3 (permalink)  
Antiguo 23/12/2010, 11:48
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Índice numérico que altera el LIMIT

Si, tenes que usar una variable para saber por donde empezar, tenes dos opciones, o mandas el numero de página o donde empieza, y en función de eso armas la consulta. Lo único no te olvides de validar que ese numero que obtenes del GET sea realmente un número, lo podes hacer con la función is_numeric y en caso de que no sea numero pones como si fuera la 1ra pagina.
  #4 (permalink)  
Antiguo 23/12/2010, 12:07
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Índice numérico que altera el LIMIT

Cita:
Iniciado por wjr Ver Mensaje
Si necesitás 7, cambiá el "2,5" por "7"
A ver, del 0 al 2 o sea dos div's se imprimen en un bloque de la página, del 2 al 5 se imprimen en otro bloque de la página. Creo que son 5 resultados en verdas por página, lo de 7 me equivoqué.

Mi idea es que las páginas no sean infinitamente largas porque si han de imprimir el campo entero de mi db seran muy cansadoras de leer.

Para facilitar que puedan ser leídas tengo que reproducir esa peculiaridad que es imprimir en dos bloques por separado, dos div's en uno tres div`s en el otro.


En el bloque de abajo puedo poner de LIMIT de 2 a 1000 de haber mil celdas en el campo que se imprime (que no las hay).


areslepra por favor ¿podrías ponerme un ejemplo? Yo sólo entendi que podrían mandarse 2 variables por GET recogerse por separado y ser aplicadas con cada enlace. EL problema es que el contenido de las variables ha de ser numérico, bueno tampoco es un problema, pero si me pudieras poner un ejemplo de esto último...


Muchas gracias.
  #5 (permalink)  
Antiguo 23/12/2010, 13:23
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Índice numérico que altera el LIMIT

A ver la cosa sería más o menos así, supongamos que llamamos a la web
ejemplo.php?pagina=2

Donde pagina sería el número de página:

Código PHP:
$pag $_GET['pagina'];
if(
is_numeric($pag) && is_int($pag)) {
  
$pag = (int) $pag;
}else{
  
$pag 0;
}
$cantidad 2
$inicio 
$pag $candidad;

$sql "SELECT * FROM tabla WHERE campo = '$id' ORDER BY id ASC LIMIT $inicio, $cantidad"
La primera parte es un validación bastante precaria pero deberia funcionar (no lo probe pero deberia), después calculamos el primer registro en función del número de púgina y la cantidad por página y mandamos esos datos al SELECT y listo.
Es a modo de ejemplo pero supongo que te va a servir de guia.
  #6 (permalink)  
Antiguo 24/12/2010, 00:29
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Índice numérico que altera el LIMIT

Cita:
Iniciado por areslepra Ver Mensaje
A ver la cosa sería más o menos así, supongamos que llamamos a la web
ejemplo.php?pagina=2

Donde pagina sería el número de página:

Código PHP:
$pag $_GET['pagina'];
if(
is_numeric($pag) && is_int($pag)) {
  
$pag = (int) $pag;
}else{
  
$pag 0;
}
$cantidad 2
$inicio 
$pag $candidad;

$sql "SELECT * FROM tabla WHERE campo = '$id' ORDER BY id ASC LIMIT $inicio, $cantidad"
La primera parte es un validación bastante precaria pero deberia funcionar (no lo probe pero deberia), después calculamos el primer registro en función del número de púgina y la cantidad por página y mandamos esos datos al SELECT y listo.
Es a modo de ejemplo pero supongo que te va a servir de guia.

Gracias por tu aportación he podido resolverlo. Sin embargo lamento decirte que mi nivel de php es tan pésimo que me he limitado a usar $_GET para capturar la variable $pag y luego he usado operadores matemáticos.

Te expongo el código por si te parece que se puede mejorar. La única pega es el tema de la url que pese a mis esfuerzos va a quedar tal que así:

http:www.dominio.com/dinamica.php?id=seccion&pag=0
http:www.dominio.com/dinamica.php?id=seccion&pag=1
http:www.dominio.com/dinamica.php?id=seccion&pag=2...

De todas formas reconozco que tampoco sabría como ahorrarme la variable $pag si quiero ir recorriendo las páginas con los enlaces numerados. En SEO pregunté y me dijeron que si mi proveedor de hosting lo permite eso se arregla con "mod_rewrite" y consultando me han dicho que sí que disponen de ello.

Bien ahora te expongo los enlaces:

<a href="dinamica.php?id=seccion&pag=0">[0]</a>
<a href="dinamica.php?id=seccion&pag=0">[1]</a>...

El código en dinamica.php:

$id = mysql_real_escape_string($_GET['id']);

$pag = mysql_real_escape_string($_GET['pag']);

$inicio = $pag * 4;

$fin = 2;

$sql = "SELECT * FROM tabla WHERE campo = '$id' ORDER BY id ASC LIMIT $inicio, $fin";

Luego en la otra sección donde el bucle while seguía imprimiendo 2 0 3 resultados más simplemente he usado operadores aritméticos, no es por afan se sinplificar, es que tu solución yo no sabía colocarla sin que me diera fallos en $inicio = $pag * $candidad; así que puse directamente $inicio = $pag * 4; en fin a ver si me pongo las pilas y me leo un tutorial extenso de php que bajé de librosweb. Aquí el código para la otra sección:

$inicio = ($pag * 4) + 2;

$sql = "SELECT * FROM tabla WHERE campo = '$id' ORDER BY id ASC LIMIT $inicio, $fin";

Si ves algún error dímelo por favor, cualquier cosa que yo pueda comprender (que no es mucho) y así colocarlo. Por ejemplo no entendí el error al leer $inicio = $pag * $candidad; cuando antes se había declarado el valor de cantidad.

Última edición por Gambinoh; 24/12/2010 a las 01:43 Razón: Había metido la gamba en $fin
  #7 (permalink)  
Antiguo 24/12/2010, 03:53
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Índice numérico que altera el LIMIT

Solucionado el tema de los enlaces del índice inferior del pie de página detectando el número de filas de una categoría de un campo.

$sql = "SELECT * FROM tabla WHERE campo = '$id'";
$r=mysql_query($sql);

#Muestra la cantidad de filas
$rcount=mysql_num_rows($r);

#Opcional pero puede ser útil
echo $rcount;


if ($rcount == 10) {
echo "<a href=\"dinamica.php?id=$id&pag=0\">[0] </a><a href=\"dinamica.php?id=$id&pag=1\">[1]</a>";
} elseif ($rcount == 15) {
echo "<a href=\"dinamica.php?id=$id&pag=0\">[0] </a><a href=\"dinamica.php?id=$id&pag=1\">[1] </a><a href=\"dinamica.php?id=$id&pag=2\">[2]</a>";
} else {
echo 'La página tiene sólo 5 resultados';
}

Última edición por Gambinoh; 24/12/2010 a las 04:32 Razón: Ya encontré la solución buscando en el foro

Etiquetas: limit
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:19.