Limitar o número de exibição de uma consulta

1. Limitar o número de exibição de uma consulta

Andre Luis
andre227

(usa Slackware)

Enviado em 27/07/2010 - 18:42h

Boa Noite a todos,

Sou novo em php, estou fazendo um mural de recados, porém surgiu uma dúvida. Tipo supondo que eu queira configurá-lo para exibir 10 recados por página. No livro que estou lendo a consulta SQL seria assim: SELECT * FROM TABELA LIMIT 0,10 .

Só que aí que está minha dúvida, como eu criaria um link pra uma segunda página que exibiria os outros 10 registros, tipo como eu configuraria isso de acordo com o número de comentários que eu tenho no banco de dados?

Obrigado a todos!


  


2. Re: Limitar o número de exibição de uma consulta

Joao
stack_of

(usa Slackware)

Enviado em 27/07/2010 - 18:52h

Você pode salvar o resultado da consulta em um arranjo (array) e iterar sobre os dados do arranjo usando código PHP. Não necessita restringir a query ao banco de dados.


3. Re: Limitar o número de exibição de uma consulta

Andre Luis
andre227

(usa Slackware)

Enviado em 27/07/2010 - 19:45h

Entao cara, supondo que eu tenho 40 comentários, e quero mostrar 10 comentários por página.

Daí vou ter que criar 4 links, minha dúvida é como que vou inserir o conteúdo nas páginas seguintes.


4. paginação mysql

Rodrigo Kulb
RodrigoKulb

(usa Ubuntu)

Enviado em 27/07/2010 - 19:46h

Acho que você quer fazer uma paginação:

Você deve fazer dois selects

$quant = '10';

if($_GET['pagina']) $pagina = $_GET['pagina'];
else $pagina = '0';

$sql_1 = "SELECT * FROM TABELA LIMIT $pagina,$quant";

//sem limit parar ver quantas paginas terá
$sql_2 = "SELECT * FROM TABELA";

while(...
{
$i++;
print "Pagina ".$i." -> link via GET para "$i*$quant;
}

acho q é mais ou menos isso ai....

espero ter ajudado!!!


5. Re: Limitar o número de exibição de uma consulta

Andre Luis
andre227

(usa Slackware)

Enviado em 27/07/2010 - 20:26h

Hm, é isso mesmo cara, uma paginação. Obrigado por ajudar. Acho que entendi +/- vou tentar executar aqui. Obrigado pela ajuda!!


6. Re: Limitar o número de exibição de uma consulta

Andre Luis
andre227

(usa Slackware)

Enviado em 28/07/2010 - 00:44h

Cara então, eu consegui! Porém acho que fiz de um jeito muito complexo, gostaria de ver se existe uma maneira mais fácil.

Não fiz o esquema das 2 comsultas que vc sugeriu pois meus cadastros estão organizados por ORDER BY DESC. Daí segui a idéia do stack_of e copiei tudo para um vetor através de uma função que encontrei no site do php.net .

Veja o Código:
<?php
$query = "SELECT * FROM Mural ORDER BY idRecado DESC";
$resultado = mysql_query($query);
$row = meu_array($resultado);

$num_resultados = mysql_num_rows($resultado);

if ($num_resultados == 0) {
echo "<table align='center' width='70%' border='1' cellspacing='0' bordercolor='#000000' bgcolor='#CCCCCC'>";
echo "<tr>";
echo "<td><font face='Georgia, Times New Roman, Times, serif'><center>Nenhum recado postado!</center></font></td>";
echo "</tr>";
echo "</table>";
exit;
}



//Calculo da qtde de paginas
$npaginas = $num_resultados / 5;
if ($nresultados % 5) {
$npaginas = (int)$npaginas;
}
else {
$npaginas = (int)$npaginas + 1;
}

//Verifica a pagina em que o usuario está
if ($_GET['pagina']) {
$pagina = $_GET['pagina'];
}
else {
$pagina = '1';
}

$limite = ($pagina - 1) * 5;

//Impressao dos recados

for($i = $limite; $i < $pagina * 5; $i++) {
// $row = mysql_fetch_array($resultado);
echo "<table width='100%' border='1' cellpadding='4' cellspacing='0' bordercolor='#000000' bgcolor='#CCCCCC'>";
echo "<tr>";
echo "<td width='40%'><font face='Georgia, Times New Roman, Times, serif'>Por: ";
echo $row[$i]['Nome'];
echo "</font></td>";
echo "<td width='30%'><font face='Georgia, Times New Roman, Times, serif'>Em: ";
echo $row[$i]['Dia'];
echo "</font></td>";
echo "<td width='30%'><font face='Georgia, Times New Roman, Times, serif'>As: ";
echo $row[$i]['Hora'];
echo "</font></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan='3'><font face='Georgia, Times New Roman, Times, serif'>";
echo $row[$i]['Recado'];
echo "</font></td>";
echo "</tr>";
echo "</table>";
echo "<br />";
//Esta linha freia impressões da tabela quando a página possue menos que 5 registros
if (($i + 1) == $num_resultados) {
break;
}
}

echo "<font face='Georgia, Times New Roman, Times, serif'>";

//Impressão dos Links
for($i = 1; $i <= $npaginas; $i++) {
//Este if não linka a página onde o usuário esta navegando
if ($i == $pagina) {
echo $i. " | ";
}
else {
echo "<b><a href='?pagina=".$i."'>".$i."</a></b>";
//Este if não imprime o último | da sequeência
if ($i != $npaginas) {
echo " | ";
}
}
}

echo "</font><br /><br />";

function meu_array($result)
{
$table_result=array();
$r=0;
while($row = mysql_fetch_assoc($result)){
$arr_row=array();
$c=0;
while ($c < mysql_num_fields($result)) {
$col = mysql_fetch_field($result, $c);
$arr_row[$col -> name] = $row[$col -> name];
$c++;
}
$table_result[$r] = $arr_row;
$r++;
}
return $table_result;
}
?>

Gostaria de saber se há uma maneira mais fácil. Obrigado a todos!



7. LIMIT / ORDER BY

Paulo
henbran

(usa Debian)

Enviado em 28/07/2010 - 08:11h

idPessoa = $_POST[idPessoa];

if(!$idPessoa){
$sql = " SELECT * FROM tabela ORDER BY idPessoa LIMIT 10";
}
else
{
$sql = " SELECT * FROM tabela WHERE idPessoa > ".$idPessoa." ORDER BY idPessoa LIMIT 10";
}

====
OBS: Quando mandar os parâmetros para consulta, do HTML, mande o idPessoa. Caso não mandar, a consulta será os 10 1ºs registros. Quando mandar o idPessoa, a consulta será os 10 registros após o idPessoa especificado.
------------------------------------------------
CASO ESSA ILUSTRAÇÃO NÃO O SATISFAÇA, POSTE AQUI EVENTUAIS DÚVIDAS. ESSE É O NOSSO ESPAÇO. ABRAÇOS



8. Sei o que você qeur fazer!!!

Fagner Fjas
fagnerfjas

(usa Ubuntu)

Enviado em 03/08/2010 - 12:32h

primeiro você tem que fazer duas consultas no banco de dados, uma você pega o valor total de registros, e na outra você pega só os dados para mostrar na página,
quando tu tiver o número total de registros vc vai dividir ele pela quantidade de registros que vai aparecer.
Ex: 30 registros dividido por 6 é igual a 5 páginas, cada uma com 6 recados no livro de visita.

Apartir desse número 5 você pode criar um contador que adiciona 6 em cada número( ex: 0+6 ->, 6+6 ->, 12+6 ->, 18+6->, 24+6 -> 30), um for que vai criar um link diferente para cada 6 registros.


nesse link vc vai enviar um valor referente ao inicio do limit na pesquisa mysql.
Ex: <a href="localhost/index.php?limit=0"> página 1
<a href="localhost/index.php?limit=6"> página 2
<a href="localhost/index.php?limit=12"> página 3

depois é só fazer a consulta no mysql com o limit referente ao solicitado no link
(SELECT * FROM TABELA LIMIT '. $_GET[limit] .', 6 .)

desculpa aê se a esplicação ta dificil de entender, se quiser eu mando um exemplo.



9. Re: Limitar o número de exibição de uma consulta

Andre Luis
andre227

(usa Slackware)

Enviado em 03/08/2010 - 14:51h

fagnerfjas, valew primeiro eu fiz desse jeito que mostrei. Mas agora fiz também utilizando 2 consultas. Valew!


10. Denada pô

Fagner Fjas
fagnerfjas

(usa Ubuntu)

Enviado em 04/08/2010 - 03:06h

"Estamos aqui pra isso"!!!
Ajudar e ser ajudado,






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts