Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kellison Ruan

Como não repetir os dados exibidos de uma tabela?

Recommended Posts

Gente, por favor me ajude, empaquei com o meu código nesse problema, e não consegui sair.

É o seguinte, estou criando um sistema de matrícula online, para faculdade, onde na página das disciplinas disponíveis para cursar, estarão exibidas, as disciplinas que o aluno perdeu, e que vai estar disponível para ele cursá-la novamente, e a outra exibição será das disciplinas novas, que o aluno poderá selecionar quais queres cursar. O problema é que, estou fazendo a exibição dos dados das disciplinas perdidas assim:

<?php
                                            $sql_1 = mysql_query("SELECT * FROM notas_aluno WHERE matricula_aluno_notas = '$codigo' AND situacao != 'MT' AND situacao != 'AF' AND situacao != 'PF' AND situacao != 'AM'");
                                            while($res_1 = mysql_fetch_array($sql_1)){
                                                $disci_nota = $res_1['disciplina_nota'];
                                                $situacao = $res_1['situacao'];                            
                                            ?>                                            
                                              <tr>
                                                <td><?php $sql_3 = mysql_query("SELECT * FROM disciplinas WHERE id_disc = '$disci_nota'");
                                                    while($res_3 = mysql_fetch_array($sql_3)){
                                                    $id_prof = $res_3['professor'];
                                                    $id_disc = $res_3['id_disc'];                                                  
                                                    ?>                                                                                
                                                    <div class="col-md-4">                                    
                                                    <label class="check"><input type="checkbox" class="icheckbox"/></label>
                                                    </div>                                                    
                                                </td>
                                                <td><?php echo $res_3['nome_disc']; ?></td>
                                                <td><?php echo $res_3['turma']; ?></td>
                                                <td><?php echo $res_3['horas']; ?></td>
                                                <td><?php echo $res_3['turno']; ?></td>
                                                <td><?php echo $res_3['horario']; ?></td>
                                                <td><?php echo $res_3['dia']; ?></td>                                        
                                                <td><?php $sql = mysql_query("SELECT * FROM dados_prof WHERE id_prof = '$id_prof'");
                                                $contar = mysql_num_rows($sql);
                                                if ($contar <='0'){
                                                echo "Não definido";
                                                }else {
                                                while ($rs = mysql_fetch_array ($sql)){
                                                $nome_prof = $rs['1'];
                                                echo $nome_prof;  }?></td>
                                            </tr>
                                            <?php }}}?>

 

Ignorem o HTML, foquem no código php. Bem, como podem ver, dependo de fazer esse select:

(SELECT * FROM notas_aluno WHERE matricula_aluno_notas = '$codigo' AND situacao != 'MT' AND situacao != 'AF' AND situacao != 'PF' AND situacao != 'AM'")

para que ele mostre apenas as disciplinas onde 'situacao' for diferente das siglas de MT = Matriculado, AF = Aprovado na Prova Final, PF = Vai para a Prova Final, AM = Aprovado por média. Pois, não faz sentido o aluno se matricular nem nenhuma disciplina já passada, ou matriculada. Bom, e o outro código é na mesma página que exibe este, e eles está desse jeito:

 

<?php $sql_3 = mysql_query("SELECT * FROM disciplinas WHERE id_disc != '$disci_nota' AND curso = '$id_do_curso'");
                                                    while($res_3 = mysql_fetch_array($sql_3)){
                                                    $id_prof = $res_3['professor'];
                                                  ?>
                                                <td>                                                                                
                                                    <div class="col-md-4">                                    
                                                    <label class="check"><input type="checkbox" class="icheckbox"/></label>
                                                    </div>                                                    
                                                </td>
                                                <td><?php echo $res_3['nome_disc']; ?></td>
                                                <td><?php echo $res_3['turma']; ?></td>
                                                <td><?php echo $res_3['horas']; ?></td>
                                                <td><?php echo $res_3['turno']; ?></td>
                                                <td><?php echo $res_3['horario']; ?></td>
                                                <td><?php echo $res_3['dia']; ?></td>                                        
                                                <td><?php $sql = mysql_query("SELECT * FROM dados_prof WHERE id_prof = '$id_prof'");
                                                $contar = mysql_num_rows($sql);
                                                if ($contar <='0'){
                                                echo "Não definido";
                                                }else {
                                                while ($rs = mysql_fetch_array ($sql)){
                                                $nome_prof = $rs['1'];
                                                echo $nome_prof;  }?></td>
                                            </tr>
                                            <?php }}?>

 

O problema maior está neste código, ele mostra para mim todas as disciplinas, mas eu preciso que apareça apenas as outras disciplinas que estejam disponíveis para cursar, com exceção das que já foram exibidas lá nas disciplinas perdidas e que o aluno irá cursar novamente (primeiro código). Este código está exibindo todas as disciplinas, inclusive repetindo as do primeiro código, não sei mais o que fazer.

 

Me ajude!!! Grato, desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo oque eu entendi, você faz um select em uma parte do código e logo em seguida outro né?

E você gostaria que o resultado do select 2 não conte-se as coisas do select 1, seria isso?

 

Caso sim, creio que uma das forma possível seria a seguinte, no primeiro select na hora de percorrer os valores tu gera um array desses dados que não podem ser repetidos:

https://secure.php.net/manual/pt_BR/language.types.array.php

 

Depois na hora de percorrer o segundo select, tu compara se o valor 'X' existe naquela array que foi gerada, caso não tu printa.

http://php.net/manual/pt_BR/function.array-search.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro código você cria um array vazio, dentro do laço while você popula ele com os IDs das disciplinas perdidas usando array_push. No segundo código você passa esse array como parâmetro no SQL usando a cláusula " not in": https://www.google.com.br/#safe=off&q=mysql+in+clause&*

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, EdCesar disse:

 

Se eu entendi direito, basta você pedir na segunda consulta, para descartar os resultados da primeira consulta:
 


"SELECT * FROM disciplinas
WHERE id_disc != '$disci_nota'
AND curso = '$id_do_curso' 
AND CHAVE_DA_CONSULTA 
NOT IN
    (SELECT CHAVE_DA_CONSULTA 
     FROM notas_aluno 
     WHERE matricula_aluno_notas = '$codigo' 
     AND situacao != 'MT' 
     AND situacao != 'AF' 
     AND situacao != 'PF' 
     AND situacao != 'AM'
     )
";

O campo "CHAVE_DA_CONSULTA" você troca pela chave primaria que identifica o resultado, não sei se no seu caso é id_disc ou matricula_aluno_notas ou alguma outra.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.