Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) limitar dados sem ser na query


unisov

Pergunta

ola

estou com o seguinte problema com esse codigo

já procurei e testei varias soluçaos mas nenhuma deu certo...

quando eu faço dessa forma eu consigo colocar limite e os arquivos são aparesentados da forma correta, limitando a apresentar apenas os 30 primeiros arquivos...

$query_rgtopic = "SELECT * FROM ibf_attachments WHERE attach_ext = 'rcx' ORDER BY 'attach_id' ASC" LIMIT 0, 30;
$rgtopic = mysql_query($query_rgtopic, $DBCONN) or die(mysql_error());
$row_rgtopic = mysql_fetch_assoc($rgtopic);
$totalRows_rgtopic = mysql_num_rows($rgtopic);

<? $cont=1; do { 
echo $row_rgtopic['attach_file'];
} while ($row_rgtopic = mysql_fetch_assoc($rgtopic));
porem eu tenho um script q analiza os arquivos "rcx" e estou tentando apresenta-los de forma separada, de acordo com a informaçoes q cada um contem... então estou fazendo dessa forma :
$query_rgtopic = "SELECT * FROM ibf_attachments WHERE attach_ext = 'rcx' ORDER BY 'attach_id' ASC" LIMIT 0, 30;
$rgtopic = mysql_query($query_rgtopic, $DBCONN) or die(mysql_error());
$row_rgtopic = mysql_fetch_assoc($rgtopic);
$totalRows_rgtopic = mysql_num_rows($rgtopic);

<? $cont=1; do { 
// O script q analiza os arquivos RCX é colocado por meio de inlcude dentro do codigo
$file = $_SERVER['DOCUMENT_ROOT']."/forum2/uploads/".$row_rgtopic['attach_location'];
$xml   = ReturnRecGameXml( $file );
$array = ParseRecGameXml( $xml );
$option = InsertRealCivsIntoArray( $array );

if (informçao rcx == info1) {

echo $row_rgtopic['attach_file'];

} }  while ($row_rgtopic = mysql_fetch_assoc($rgtopic));

dessa forma so serao apresentados os rcx q contenham a informaçao info1

porem, ao invez de listar os 30 primeiros arquivos q contenham essa informçao, acho q ele esta pegando, entre os 30 primeiros rcx, os que contem info1

isso esta sendo um problema para mim criar uma paginaçao, pois em cada pagina aparecem numeros diferentes de rcx...

então eu queria saber se:

1 - é possivel limitar os dados a serem apresentados de outra forma, sem ser na query?

2 - é possivel fazer um script de paginaçao sem usar a query?

3 - existe outra forma de fazer o que estou querendo sem ser essa q estou tentando?

alguém pode me ajduar?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

1 - Como você está usando um laço, pode interrompê-lo a qualquer momento com break, logo, pode usar um condicional dentro do laço que verifique que a condição que você quer é verdadeira ou falsa, e dentro disso usar o break para parar de ler os dados do BD;

2 - Você vai ter que usar o LIMIT de qualquer maneira, mas em vez de informar início e fim, vai informar apenas onde os dados devem começar a serem lidos;

3 - Você deveria guardar a informação que está fazendo diferença no BD, assim poderia filtrar tudo na query.

Link para o comentário
Compartilhar em outros sites

  • 0

? $cont=1; do {
// O script q analiza os arquivos RCX é colocado por meio de inlcude dentro do codigo
$file = $_SERVER['DOCUMENT_ROOT']."/forum2/uploads/".$row_rgtopic['attach_location'];
$xml   = ReturnRecGameXml( $file );
$array = ParseRecGameXml( $xml );
$option = InsertRealCivsIntoArray( $array );

if (informçao rcx == info1) {

echo $row_rgtopic['attach_file'];

if("tal coisa for verdadeira"){
break;
}

} }  while ($row_rgtopic = mysql_fetch_assoc($rgtopic));

Observe que "tal coisa for verdadeira" deve ser a condição que deve ser testada...

Link para o comentário
Compartilhar em outros sites

  • 0

então cara...

o que eu não estou sabendo fazer é essa "tal coisa"...

na pesquisas q eu fiz eu so achei formas de fazer isso em laços for, ou ate while com numeraçao...

agora nesse caso ai, como eu daria o comando de parar quando se completassem o numero de linhas q eu desejo? (se é q isso é possivel)

Link para o comentário
Compartilhar em outros sites

  • 0

Hun, pensei que você soubesse programar... mas vamos lá: Como faz o "tal coisa".

Raciocínio simples, se o objetivo é que seja encerrado o while após um certo número de registros, teríamso que testar os registros para filtrar os que interessam, mas isso já é feito no script que você copiou, vejamos

if (informçao rcx == info1) {

echo $row_rgtopic['attach_file'];

}
Essa parte dá o echo apenas no que interessa. Então, se o objetivo é conta apenas o que interessa, basta criar um contador qualquer e incrementar dentro desse if.
$query_rgtopic = "SELECT * FROM ibf_attachments WHERE attach_ext = 'rcx' ORDER BY 'attach_id' ASC" LIMIT 0, 30;
$rgtopic = mysql_query($query_rgtopic, $DBCONN) or die(mysql_error());
$row_rgtopic = mysql_fetch_assoc($rgtopic);
$totalRows_rgtopic = mysql_num_rows($rgtopic);

<? 
$contado_qualquer = 1;
$cont=1; do {
// O script q analiza os arquivos RCX é colocado por meio de inlcude dentro do codigo
$file = $_SERVER['DOCUMENT_ROOT']."/forum2/uploads/".$row_rgtopic['attach_location'];
$xml   = ReturnRecGameXml( $file );
$array = ParseRecGameXml( $xml );
$option = InsertRealCivsIntoArray( $array );

if (informçao rcx == info1) {

echo $row_rgtopic['attach_file'];
$contado_qualquer++;//Incrementa o contador...
}

if($contador_qualquer == '30'){
break;
}
 }  while ($row_rgtopic = mysql_fetch_assoc($rgtopic));

Explicando, criei uma variável $contador_qualquer, atribui o valor de "1", dentro do condicional que faz a filtragem eu incremento (adiciono +1 ao valor da variável), antes do final do laço faço o if, se o valor de $contador_qualquer for igual a 30 o if é verdadeiro e dá o break no laço.

Link para o comentário
Compartilhar em outros sites

  • 0

cara...

muito obrigado...

de fato o raciocinio é simples... tava na cara e eu não vi rsrsrs

isso ai já vai resolver metade do meu problema...

agora vo tentar resolver a outra metade...

alguém conhece algum script de paginaçao que se baseie nesse tipo de contador, ao invez de limit na query?

ou

alguém sabe se existe algum comando que conte o numero dados filtrados pelo if?

tipo...

se eu tenho

if (informçao rcx == info1) {

echo $row_rgtopic['attach_file'];

}

exista alguma forma de contar quanto echo's terei nesse caso?

espero não ter falado muita besteira... se algum puder me ajudar eu agradeço...

Link para o comentário
Compartilhar em outros sites

  • 0

Mais uma vez falta parar aqueles 5 segundos e pensar:

Quantos echos terei?

Bom, usando aquele raciocínio simples e lógico bastaria pensar, como vou saber quando parar?

if($contador_qualquer == '30'){

Sabendo que o valor inicial é 1, logo, é óbvio que terei 29 echos, se você desejar que o número de echos seja igual ao usado no if ( == 30), basta deixar o contador inicial como zero.

Pronto.

Link para o comentário
Compartilhar em outros sites

  • 0

Como no teu caso você está usando um if para filtrar os registros (coisa que deveria ser pensanda antes e inserida a informação no BD), o que você tem que fazer não é esse contador que você está pensando, o que te interessa para fazer a paginação é saber qual foi o último ID exibido (que entrou no if), então você vai colocar isso no WHERE.

Exemplo, na página 1,

WHERE id > '0'

Supondo que o 30º registro a entrar no IF tenha sido o 573, então foram lidos 573 registros na primeira página e o 30º que te interessa foi o de número 573, na próxima página basta fazer a query:

WHERE id > '573'

Isso vai forçar ele a ler os registros logo a frente do último lido na página anteriror.

Mas sinceramente, isso tudo é uma bela gambiarra, se você estiver fazendo algum script de missão crítima esqueça isso tudo e insira as informações adicionais na tabela com a finalidade de evitar ler todos os registros apenas para suprir a deficiência na modelagem da tabela.

Link para o comentário
Compartilhar em outros sites

  • 0

é... não tava dano mesmo...

no dia que você sugeriu q eu colocasse os dados na database eu nem cogitei esse possibilidade por q eu não fazia ideia de como faria isso... mas enfim consegui e agora da pra fazer a paginaçao sem problema... vlw aew

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...