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

(Resolvido) Dúvida Com Loop


viejoyo

Pergunta

Fala aê personas..é o seguinte tenho uma pág que exibe umas chamadas de umas notícias de maneira randomica,beleza...so que exibe 3 chamadas..ai eu estava querendo listar abaixo outras 10..sem listar nenhuma das que já estão na chamada, entendem?

Eu fiz assim e não deu certo:

Eu faço o loop onde o id_noticia é <> que a variavel $id_n que por sua vez tem o valor id_noticia das noticias das chamadas...mas ai ele pega uma por uma no loop certo? então sempre repete, eu queroa saber como resumir os id's das chamadas pra depois os comparar nesse loop de minha listagem...deu pra enteder?

Abraço!!

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Guarde os IDs dessas três mensagens que você exibiu antes, ai na query que busca as outras 10 coloque lá no WHERE:

WHERE id NOT IN('$ids')
Onde $ids vai guardar as IDs já exibidas separadas por , (ex. 5,23,34)... também dá pra repetir...
WHERE id != '$id1' AND id != '$id2' AND id !='$id3'

Onde $id1, $id2 e $id3 vão conter as IDs pegas em cada volta do laço que busca as 3 notícias...

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz assim...

for ($i=0;$i<mysql_num_rows($exe);$i++) {
      $not=mysql_fetch_array($exe);
      $id_n[$i]=$not['id_noticia'];
      $id=implode(",",$id_n);
...
Na query da listagem ficou:
...
$sql="select * from noticia WHERE id_noticia NOT IN('$id') order by data desc limit 10";
...

E o que ta acontecendo é o seguinte..ex tenho 4 noticias a lógica seria exibir as 3 chamadas e uma abaixo,mas ele me exibe as 3 chamadas e mais 3 abaixo, sendo que uma dessas 3 é a 4 notícia... o que posso estar fazendo de errado?

Abraço!!

Link para o comentário
Compartilhar em outros sites

  • 0

Exibo as 3 chamadas:

<tr>
<?php 
      $sql="select * from noticia order by rand() limit 3";
      $exe=mysql_query($sql,$conexao);
      $col=1;
      for ($i=0;$i<mysql_num_rows($exe);$i++) {
      $not=mysql_fetch_array($exe);
      $id_n[$i]=$not['id_noticia'];
      
      if ($col==2) { echo "</td><td width=155>"; $col=1; } 
     ;?>
        <td width="147" valign="top">
            <? if ($not['img']!="") { ?><img src="../upload/noticia/<?=$not['img'];?>" width="127" height="88" hspace="15" vspace="1" border="0"> <? } ?>           </p>      <?=$not['titulo'];?><br>
    <?=stripslashes(substr($not['conteudo'], 0, 50) );?> ..
          </td>
<? }
$col++;
?>
Aqui faço a listagem:
<?php
    $id=implode(",",$id_n); 
    $sql2="select * from noticia WHERE id_noticia NOT IN ('$id') order by data desc limit 10";
    $exe2=mysql_query($sql2,$conexao);
    for ($i=0;$i<mysql_num_rows($exe2);$i++) {
    $o_not=mysql_fetch_array($exe2);
    ?><tr>
    <td width="575">
    <?=for_data($o_not['data']); ?> - <?=$o_not['titulo'];?></a></td>
    
    </tr><? } ?>

Vlw!!

Link para o comentário
Compartilhar em outros sites

  • 0

E aê pessoal ainda que deletaram meu último post, vo postar como foi que resolvi essa questão...

<?php
    $id=implode(",",$id_n);
    $i=explode(",",$id); 
    $sql2="select * from noticia where id_noticia != '".$i[0]."' and id_noticia != '".$i[1]."' and id_noticia != '".$i[2]."' order by data desc limit 10";
    $exe2=mysql_query($sql2,$conexao);
    for ($i=0;$i<mysql_num_rows($exe2);$i++) {
    $o_not=mysql_fetch_array($exe2);
    ?><tr>
    <td width="575">
    <?=for_data($o_not['data']); ?> - <?=$o_not['titulo'];?></a></td>
    
    </tr><? } ?>

Abraço!!

Editado por viejoyo
Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

dá pra resolver num sql só... utiliza o UNION... você faz um select pra pegar as 3 chamadas, ai faz outro select pra pegar as 10 noticias, usando o NOT IN, pra não pegar as 3 que já foram... ficaria assim

(SELECT * FROM noticias WHERE id IN(1,2,3)) UNION (SELECT * FROM noticias WHERE id NOT IN(1,2,3) LIMIT 10)

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...