Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Dúvida Com Loop


viejoyo

Question

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 to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

  • 0

Era pra funcionar, já que na query está explicito que é pra pegar todos os resultados, menos os IDs especificados no NOT IN... de qualquer maneira, coloca na outra forma que eu passei, negando separadamente os 3 IDs...

Link to comment
Share on other 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!!

Edited by viejoyo
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...