Foros del Web » Programando para Internet » PHP »

Problema con distribucion de query en paginas

Estas en el tema de Problema con distribucion de query en paginas en el foro de PHP en Foros del Web. Hola, intentare explicar mi problema; tengo una base de datos mysql donde tengo una tabla en donde meto reportajes, dichos reportajes pueden alcanzar las 10 ...
  #1 (permalink)  
Antiguo 18/08/2004, 19:34
Avatar de Gryphus  
Fecha de Ingreso: febrero-2003
Ubicación: Spain
Mensajes: 216
Antigüedad: 14 años, 9 meses
Puntos: 0
Problema con distribucion de query en paginas

Hola, intentare explicar mi problema; tengo una base de datos mysql donde tengo una tabla en donde meto reportajes, dichos reportajes pueden alcanzar las 10 paginas de un documento del Microsoft Word.
A la hora de llamar la consulta para que aparezca en mi web no puedo poner toda la informacion en una sola pagina pero tampoco puedo dividirla, al menos no se como hacerlo.
Como no sabia como dividir dichos reportajes en paginas hice varios campos en mi base de datos, como maximo 30 campos para 30 paginas (que no creo que llegue a poner nunca un reportaje de dichas dimensiones). De este modo puedo como he dicho; distribuir la informacion en varias paginas. El problema viene cuando tengo que poner abajo "Pagina 1, Pagina 2... asi hasta una posible 30". Estaba pensando en poner if() para cada pagina, de modo que si no hubiera nada escrito en la pagina 2 solo me saliera Pagina 1, pero es un poco basto. Ya tengo puesto para que si llamas a la pagina 2 desde pag=2 salga dicha pagina pero antes de seguir me gustaria saber si hay otra alternativa ya que creo que lo que estoy haciendo es algo un poco primitivo.
Saludos y gracias
  #2 (permalink)  
Antiguo 18/08/2004, 21:52
Avatar de sir_notos  
Fecha de Ingreso: noviembre-2001
Ubicación: Mexicali
Mensajes: 709
Antigüedad: 16 años
Puntos: 1
bueno no entendi muy bien pero talvez te sirva esto es una clase que eh echo para paginar con php

http://www.electros.net/?scripts&c=19&s=241


Tambien esta paginaitor de Jpinedo
y la clase de paginacion de webstudio


este.... :0

lo que puedes hacer tambien es crear una tabla llamada paginas que tenga estos campos

Tabla->paginas
page_id - Smallint 9 index notnull unsigned
article_id - smallint 9 notnull unsigned
textbody - text notnull

tabla->articulos
article_id - Smallint 9 index notnull unsigned
title - varchar 250 notnull

tons arias una page que te listara
Código PHP:
$sql 'SELECT * FROM articulos';
... 
etc etc
echo "<a href=\"articulo.php?id=$row[article_id]\">" 
luego en articulo php
Código PHP:
$sql "select * from paginas where article_id = $_GET[id]";
if (
$row mysql_fecth_array)
{
   echo 
'';


y asi puedes tener mas de una pagina de hecho puedes tener de 1 a las que quieras solo asegurate de al crear un nuevo articulo Cada Pagina que le añads tenga en article_id el valor del id de la tabla articulos

despues para paginar solo usa un paginador comun y corriente puede ser como ya te dije

Paginaitor - Jpinedo
Clase De paginacion - Webstuio
Paging - Yo mero
__________________
Usuario Registrado de linux #374849
  #3 (permalink)  
Antiguo 18/08/2004, 22:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. creo que usar "30" campos no es la mejor solución para crear un "documento" de N páginas ..

Deberías tratar las páginas como registros de una tabla extra relacionada con la tabla "padre" que define ese "documento" tipo:

tabla documentos:
id_doc
titulo
introducción
blabla

tabla paginas_doc:
id_pagina
id_doc
contenido_pagina
etc ...

Así podrás contar los registros de la tabla "paginas" que relacionana al "documento" por esa clave foránea que será el id_doc (... WHERE documentos.id_doc = paginas_doc.id_doc ....)

Algo tipo:

Código PHP:
<?
// conectas a tu BD .. etc ...
$sql="SELECT paginas_doc.id_pagina FROM documentos,paginas_doc FROM documentos.id_doc = paginas_doc.id_pagina AND documento.id_doc='".$_GET['id_doc']."'";
$resultado_paginas=mysql_query($sql) or die (mysql_error());
$contador=1;
$numero_paginas=mysql_num_rows($resultado_paginas);
echo 
"Este Doc .. tiene ".$numero_paginas"pagina/s<br>";
if (
$numero_paginas >0){
while (
$row=mysql_fetch_array($resultado_paginas)){
   echo 
"<a href=\"ver_pagina.php?id_pagina=".$row['id_pagina']."\">Pagina ".$contador."</a>";
$contador++;
}
} else {
   echo 
"Este Doc .. no tiene páginas ...";
}
?>
Y tu "ver_pagina.php" .. haces la consulta SQL tipica para obtener esa página de la tabla de paginas.

Código PHP:
//etc ..
$sql="SELECT * FROM paginas_doc WHERE id_pagina='".$_GET['id_pagina']."'";
// etc ... 
Así te resultará mas fácil implementar un paginado standard y sobre todo un sistema más versatil de documentos de 1 a N páginas por documento.

Un saludo,
  #4 (permalink)  
Antiguo 19/08/2004, 08:08
Avatar de Gryphus  
Fecha de Ingreso: febrero-2003
Ubicación: Spain
Mensajes: 216
Antigüedad: 14 años, 9 meses
Puntos: 0
Mmmm no lo entiendo del todo.. el contenido va en "contenido_pagina" no?, pero como me divide el contenido en varias paginas? se que
Código PHP:
echo "<a href=\"ver_pagina.php?id_pagina=".$row['id_pagina']."\">Pagina ".$contador."</a>"
$contador++; 
Sirve para que me ponga el numero de paginas que hay tipo: Página 1 2 3 4... y un link a dicha pagina, pero como me divide el contenido de "contenido_paginas" en 4 paginas por ejemplo? gracias Cluster y sir_notos ;)
  #5 (permalink)  
Antiguo 19/08/2004, 08:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La opción que yo te proponía se refiere a que tu manualmente vas a crear un "registro" para cada páginad ese documento. No a tener un "campo" y "parcelarlo/divirlo" en X páginas.

Si quieres tener un sólo "campo" con tu documento y quieres divirlo en N páginas .. tendrás que usar cierto "tag" o regla que aplicar para saber donde empieza y acaba una de tus páginas .. Puede ser por algún tag própio que digas algo así como "[aqui_salto_de_pagina]" y .. a la hora de leer tu documento buscas ese "tag" para presentar sólo ese segmento del documento .. o puedes decir algo como "cuento líneas del doc y divido a N por página ..".

por cierto .. el "documento" de que formato estamos hablando? texto plano? .. HTML? .. o es un .doc de MS Word?

Un saludo,
  #6 (permalink)  
Antiguo 19/08/2004, 09:16
Avatar de Gryphus  
Fecha de Ingreso: febrero-2003
Ubicación: Spain
Mensajes: 216
Antigüedad: 14 años, 9 meses
Puntos: 0
Es HTML..., podria poner por ejemplo cada 70 lineas otra pagina y que por ejemplo la 1ª pagina fuera las primeras 70 lineas, la segunda pagina fueran las siguientes 70 y asi hasta acabar con el contenido? si fuera asi como tendria que contar las lineas?, saludos

Última edición por Gryphus; 19/08/2004 a las 09:18
  #7 (permalink)  
Antiguo 19/08/2004, 16:42
Avatar de Gryphus  
Fecha de Ingreso: febrero-2003
Ubicación: Spain
Mensajes: 216
Antigüedad: 14 años, 9 meses
Puntos: 0
Entonces lo puedo hacer asi no?, hago un query donde me saque en la pagina 1 las 70 primeras lineas del campo "contenido_pagina", en la pagina 2, las siguientes 70 lineas, y asi sucesivamente. En cuanto al "menu" para elegir la pagina puedo poner algo asi como lo que dijiste de:
Código PHP:
<? 
// conectas a tu BD .. etc ... 
$sql="SELECT paginas_doc.id_pagina FROM documentos,paginas_doc FROM documentos.id_doc = paginas_doc.id_pagina AND documento.id_doc='".$_GET['id_doc']."'"
$resultado_paginas=mysql_query($sql) or die (mysql_error()); 
$contador=1
$numero_paginas=mysql_num_rows($resultado_paginas)  ; 
echo 
"Este Doc .. tiene ".$numero_paginas"pagina/s<br>"
if (
$numero_paginas >0){ 
while (
$row=mysql_fetch_array($resultado_paginas)){ 
   echo 
"<a href=\"ver_pagina.php?id_pagina=".$row['id_pagina']."\">Pagina ".$contador."</a>"
$contador++; 

} else { 
   echo 
"Este Doc .. no tiene páginas ..."

?>
¿no?, como tendria que ser el codigo para lo que digo de las 70 lineas?, muchas gracias ^^
P.D.: Perdonad por poner dos posts seguidos pero es que estaba en la segunda pagina y asi se ve mejor >_<
  #8 (permalink)  
Antiguo 20/08/2004, 01:02
AKB
 
Fecha de Ingreso: agosto-2004
Mensajes: 52
Antigüedad: 13 años, 4 meses
Puntos: 0
Yo lo haría metiendo todo el artículo en un sólo campo, y poniendo un tag identificativo de "Aqui salta de página". Luego basta con hacer explode del artículo y coger la página que se quiera...

Por ejemplo el artículo 10 está separado dentro de su contenido por varios <-Pagina-> que indican donde acaba la pagina anterior y empieza otra.

/lee.php?articulo=10&pagina=4

Abrimos el articulo 10 de la bd, lo almacenamos en $articulo
Hacemos explode("<-Pagina->",$articulo) lo que nos da un array con las páginas
Mostramos la página $articulo[4] para ver la página 4
Incluso podemos hacer una barra de navegación por páginas, ya que basta con mirar el tamaño del array $pagina para saber de cuantas páginas se compone el documento
Otra ventaja es que el documento puede ser de tamaño y páginas ilimitados con este sistema, y que no llenamos la bd de registros "página", nos basta con uno sólo
Nota: Para gustos colores, es mi opinión personal, sólo eso.
  #9 (permalink)  
Antiguo 20/08/2004, 10:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Otra ventaja es que el documento puede ser de tamaño y páginas ilimitados con este sistema, y que no llenamos la bd de registros "página", nos basta con uno sólo
Nota: Para gustos colores, es mi opinión personal, sólo eso.
Como bien dices .. sobre gustos no hay nada escrito .. Pero con una BD y registros de "paginas" tendrías más control a nivel de que páginas de tu documento son visitadas o simplemente (lo mejor) crear indices dinámicos con títulos de cada página (más bien sería como crear "capítulos").

Un saludo,
  #10 (permalink)  
Antiguo 20/08/2004, 11:52
Avatar de Gryphus  
Fecha de Ingreso: febrero-2003
Ubicación: Spain
Mensajes: 216
Antigüedad: 14 años, 9 meses
Puntos: 0
¿Entonces se puede hacer lo que digo?, es decir, que la pagina 1 sean 70 lineas, la 2 las siguientes 70 y asi hasta acabar. Si es que es posible, ¿como deveria hacerlo?, ¿como se cuentan las lineas?, gracias a todos ^^
  #11 (permalink)  
Antiguo 20/08/2004, 13:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Gryphus ...

Si te dás cuenta .. estamos evitando mucho el tema de "contar líneas" por qué simplemente primero hay que definir que es una "linea" .. Una "linea" debería ser (si usas HTML) desde un <br> a otro <br> .. el tema de parrafos <p> .. </p> dependen de los caracteres por línea que quiereas representar .. (menudo lio).

Las únicas soluciones que se me ocurren de momento pasan todas por crear automáticamente ese "[aquí_va_un_salto_de_pagina"] y luego aplicar la lógica que ya hemos detallado para tal fin. Por qué .. insisto .. al parecer en tus "Base de datos" guardas un campo con tu documento en HTML .. lo cual habría que "parsearlo" para limpiarlo de HTML y desde ahí ver las líneas de "texto puro" que hay ..

¿No te gusta la idea de poner un simple tag de "[aquí_salto_de_pagina]" con el consiguiente control exacto de donde acaba una página y otra?. Yo creo que es lo más sano y efectivo.

Un saludo,
  #12 (permalink)  
Antiguo 15/06/2006, 06:18
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 12 años, 6 meses
Puntos: 0
Hola, he preferido prguntar en este topic porque el tema esparecido a mi duda, la cosa es que tengo una base de datos asi:

Código:
CREATE TABLE `articulo` (
  `artid` int(10) unsigned NOT NULL auto_increment,
  `author` varchar(30) collate latin1_spanish_ci default NULL,
  `titulo` varchar(60) collate latin1_spanish_ci default NULL,
  `catid` int(10) unsigned default NULL,
  `description` varchar(255) collate latin1_spanish_ci default NULL,
  `pag` int(10) unsigned default NULL,
  `page1_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page1` text collate latin1_spanish_ci,
  `page2_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page2` text collate latin1_spanish_ci,
  `page3_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page3` text collate latin1_spanish_ci,
  `page4_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page4` text collate latin1_spanish_ci,
  `page5_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page5` text collate latin1_spanish_ci,
  `page6_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page6` text collate latin1_spanish_ci,
  `page7_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page7` text collate latin1_spanish_ci,
  `page8_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page8` text collate latin1_spanish_ci,
  `page9_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page9` text collate latin1_spanish_ci,
  `page10_titulo` varchar(255) collate latin1_spanish_ci default NULL,
  `page10` text collate latin1_spanish_ci,
  PRIMARY KEY  (`artid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1 ;

En el lugar de crear 2 tablas, lo he hecho solo en una tabla, ahora lo que no se es como realizar la consulta, en princpio pense en hacer es, hacer una consulta la base de datos y comprobar el valor que tiene "pag",y despues hacer un while con el, pero es que no se como saber el valor que tiene "pag" y despues esto

Código PHP:
$num_pag="el valor de 'pag'";
$in 1;

echo 
"blalalal";

if(
$num_pag 0) {

while (
$in >= $num_pag) {
  
   echo 
"<a href=\"ver_articulo.php?artid=".$row['artid']."\">Pagina ".$in."</a>"
   
$in++;
   } 
y ya no se como mostrar cada pagina, supongo que usando un while, pero no estoy muy seguro

salu2
  #13 (permalink)  
Antiguo 15/06/2006, 07:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías usar dos tablas relacionadas .. No es el "n°" de tablas lo que estaría de más .. es el concepto de "normalización" .. Según tu modelo de datos (BBDD y tabla empleada) estas fijando tus artículos a un máximo de 10 páginas que tal vez para tu aplicación y caso sea suficiente .. Lo que se complica en extremo sería lo que justamente tienes problemas: implementar sistemas de paginado.

¿Por qué no usas dos tablas como en este mismo mensaje se ha mostrado y detallado? (dos tablas: pero "normalizadas").

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 15/06/2006, 12:38
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 12 años, 6 meses
Puntos: 0
lo pense, pero el problema es que no se como hago para relacionarlos, quiza esto de aqui

Código PHP:
// Loop to get the pages 
for($i 1$i 20$i++) 

if(
$_POST["pageTitle$i"] != ""

$arrPages[] = array("title" => $_POST["pageTitle$i"], "content" => $_POST["pageContent$i"]); 

}

// Add an entry to the article table 
@mysql_query("insert into articles(title, summary) values('$articleTitle', '$articleSummary')") or die("Couldn't add article: " mysql_error());

// Grab the ID of the new article record 
$articleId mysql_insert_id(); 
he estado buscando por la red y he encontrado este tutorial de aqui, pero el problema es que no pone el nombre las variables en los formularios y de javascript no tengo casi ni idea(como php xDDD)

salu2
  #15 (permalink)  
Antiguo 15/06/2006, 13:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. en principio se trata de eso mismo .. se crea el registro "padre" (por ejemplo tu archiculo" y obtienes el "ID" generado por ese registro "padre" .. ese ID es el que usaras para que cuando crees las páginas (registro de páginas en su tabla correspondiente) lo vincules en su campo (FK) correspondiente ...

Creo que deberías prácticar y preguntar este tema en forma "aislada" en un tema nuevo .. cuando lo tengas claro veras como resolver este problema más fácil. La expuse en este mismo mensaje:

http://www.forosdelweb.com/showpost....5&postcount=11

No sé donde habrá algún tutorial al respecto que use estas técnicas .. pero podrías tomar algún sistema de estos ya hechos y estudiar su código, visita sitios como www.hotscripts.com .. ahí tienes mucho tipo de aplicaciones para ver ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 15/06/2006, 17:40
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 12 años, 6 meses
Puntos: 0
la opcion de usar, lo e salto, ya lo pense, pero lo intente y no me salia, de todos modos mirare un poquillo y ya abro otro topic y lo explico en el

grcias y salu2 ^^
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 13:29.