1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

PHP Mysql - Relacionar tabelas

Discussão em 'Web Development' iniciada por s31s3r, 16 de Março de 2008. (Respostas: 8; Visualizações: 3274)

  1. s31s3r

    s31s3r Power Member

    Estou a tentar encontrar ajuda para isto mas está difícil.

    [​IMG]

    O que eu queria era criar uma lista com o php, tipo:

    Estava a tentar utilizar o GROUP BY mas não consigo com que a coisa saia como deve ser.
     
  2. s31s3r

    s31s3r Power Member

    Ya! Funciona. Pensava que tivesse que utilizar o GROUP BY.
    E como é o código PHP para mostrar
    Thanks!
     
    Última edição: 16 de Março de 2008
  3. AliFromCairo

    AliFromCairo Power Member

    Para mostrar, só tens que executar a query que foi colocada nesta thread (mysql_connect, ..., mysql_query, ...), e ir guardando num array as entradas para cada secção. Se não quiseres um array auxiliar, podes ordenar os dados pelo nome da secção.
     
  4. s31s3r

    s31s3r Power Member

    Era ordenar por secção que queria fazer, só que isto está difícil, não consigo compreeender...

    [​IMG]

    PHP:
    $q "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
          FROM noticias
          JOIN sections
          ON noticias.section_id = sections.id"
    ;
          
    $r mysql_query($q);

    while (
    $row mysql_fetch_assoc($r)) {
        echo 
    $row["not_nome"].'-->'.$row['sec_nome'].'<br />';
        echo 
    '<br />';
        
    }
    O que me dá:
    O que quero fazer é ter o nome da secção no topo, uma só vez seguido dos artigos correspondentes, tipo um sitemap ou um menu...
     
  5. Serrot

    Serrot Power Member

    Experimenta algo deste género: (não garanto q não tenha um ou outro erro :winknu:)


    Código:
    $categ= "SELECT * FROM Sections";
    $result=mysql_query($categ);
     while ($row1 =mysql_fetch_array($result) ) {
          echo "<ul>" . $row1['nome'] . "</ul>";
          $q = "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
               FROM noticias
             JOIN sections
             ON noticias.section_id = sections.id
             WHERE section_id='" . $row1['ID'] . "'" ;
     
           $r = mysql_query($q);
          while ($row = mysql_fetch_assoc($r)) {
              echo "<li>" .$row["not_nome"] . '</li>';
     
     
           } 
     } 
     
    Última edição: 16 de Março de 2008
  6. AliFromCairo

    AliFromCairo Power Member

    Podes usar a cláusula ORDER BY para ordenares os dados pelo nome da secção. Algo do género:

    Código:
    SELECT noticias.nome, sections.nome
    FROM noticias JOIN sections ON noticias.section_id = sections.id
    ORDER BY sections.nome
    
    Usando a query acima, as linhas vão aparecer ordenadas de acordo com o nome da secção, sendo que apenas necessitas de alterar ligeiramente o teu código, de modo a guardares o último nome da secção que apareceu para não estares a repeti-lo.

    Qualquer dúvida coloca aqui.
     
  7. s31s3r

    s31s3r Power Member

    Ai!
    Usei o exemplo do Serrot e estava quase o que queria:

    PHP:
    $categ"SELECT * FROM Sections";
    $result=mysql_query($categ);
    $i 0;
     while (
    $s =mysql_fetch_array($result) ) {
         
    $y[$s['nome']] = $s['nome'];
         
         
    $q "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
               FROM noticias
               JOIN sections
               ON noticias.section_id = sections.id
               WHERE section_id='" 
    $s['ID'] . "'" ;
          
          
    $r mysql_query($q);
          
          while (
    $row mysql_fetch_assoc($r)) {
              
              
    $x[] = $row['not_nome'];
          }
          
          
    $y[$s['nome']] = $x;
    }
    O que dá:

    Código:
    
    Array
    (
        [Mundo] => Array
            (
                [0] => foo
                [1] => far
                [2] => vox
            )
    
        [Politica] => Array
            (
    [COLOR=Yellow]             [0] => foo
                [1] => far
                [2] => vox[/COLOR]
                [3] => barr
                [4] => car
            )
    
    )
    
    Os valores assinalados não deveriam aparecer...
     
  8. s31s3r

    s31s3r Power Member

    Era um problema com as arrays!

    PHP:
    $categ"SELECT * FROM Sections";
    $result=mysql_query($categ);
    $i 0;
     while (
    $s =mysql_fetch_array($result) ) {
         
    //$y[$s['nome']] = $s['nome'];
         
         
    $q "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
               FROM noticias
               JOIN sections
               ON noticias.section_id = sections.id
               WHERE section_id='" 
    $s['ID'] . "'" ;
          
          
    $r mysql_query($q);
          
          while (
    $row mysql_fetch_assoc($r)) {
              
              
    $y[$s['nome']][] = $row['not_nome'];
              
          }
          

    }  
    Código:
    Array
    (
        [Mundo] => Array
            (
                [0] => foo
                [1] => far
                [2] => vox
            )
    
        [Politica] => Array
            (
                [0] => barr
                [1] => car
            )
    
    )
    
    Agora só tenho de descobrir o método para extrair isto para uma tpl do smarty...
     

Partilhar esta Página