Ir ao conteúdo
  • Cadastre-se

PostgreSQL Criando relatorios com Postgre


Posts recomendados

Boa tarde pessoal, tenho que desenvolver um trabalho de BD, onde tenho que gerar 2 relatorios sobre minha base de dados que responda a seguinte pergunta:

A partir de dados de entrada com um intervalo de datas, quais clientes compraram todos os produtos no período entre as datas (intervalo fechado)?

Isso foi o que eu fiz, porém está dando os seguintes erros e não consegui resolver, alguem q entenda poderia me ajudar por favor.

 

Notice: Undefined index: pknfvendasitens in C:\xampp\htdocs\fnts\relatorio01.php on line 57
Notice: Undefined index: fkcliente in C:\xampp\htdocs\fnts\relatorio01.php on line 58
Notice: Undefined index: fkproduto in C:\xampp\htdocs\fnts\relatorio01.php on line 59
Notice: Undefined index: qtdvendida in C:\xampp\htdocs\fnts\relatorio01.php on line 60
Notice: Undefined index: dtvenda in C:\xampp\htdocs\fnts\relatorio01.php on line 61

<?php
# Um PRG Recursivo usa um conceito de lógica de programação para diminuir a quantidade de arquivos abertos no mesmo diretório.
# No PHP, usa-se uma função de ambiente para construção de Prgs. Recursivos.
# ISSERT() retorna True/False para a existencia de valor em uma variável.
# então uma variável de nome bloco pode ser avaliada e a partir de seu valor decide-se
# qual bloco de comandos será executado.
$bloco=( ISSET($_POST['bloco']) ) ? $_POST['bloco'] : 1;
print("<html>\n<body>\n\n");
switch (TRUE)
{
  case ( $bloco==1 ):
  { # Este bloco será executado na primeira 'rodada' do programa
    # Aqui monta-se o form e deve-se passar o valor de bloco para 2 em modo oculto
    printf("<form action='./relatorio01.php' method='POST'>\n");
    printf("<input type='hidden' name='bloco' value=2>\n");
    printf("Data inicio:   <input type='date' name='dtini' <br>\n");
    printf("Data termino:  <input type='date' name='dtfim' <br>\n");
    printf("<input type='submit' name='acao' value='Enviar'>\n");
    printf("</form>\n");
    break;
  }
  case ( $bloco==2 ):
  { # Aqui se executa a construção do relatório.
    # conectando ao bd
    # Conectando o SGBD POSTGRSQL
    $host='localhost';
    $porta='5432';
    $dbname='lbd2019noite';
    $user='postgres';
    $senha='postgres';
    $string="host='".$host."' port=".$porta." dbname='".$dbname."' user='".$user."' password='".$senha."'";;
    $linkpg=pg_connect($string) or die ("Problemas para conectart ao BD");

    # Montando o comando que exeuta as junções e seleção de dados das tabelas envolvidas.
    $cmdsql="SELECT l.txnomeprod,
                    c.txnomecliente

                    FROM nfvendasitens as d inner join nfvendas as f ON d.fknfvenda=f.pknfvenda
                                            inner join produtos as l on d.fkproduto=l.pkproduto
                                            inner join clientes as c on f.fkcliente=c.pkcliente
                    WHERE dtvenda BETWEEN '$_REQUEST[dtini]' AND '$_REQUEST[dtfim]'
                    GROUP BY f.fkcliente, c.txnomecliente, d.fkproduto, l.txnomeprod, d.qtvendida
                    ORDER BY f.fkcliente, c.txnomecliente, d.fkproduto, l.txnomeprod, d.qtvendida";

    # executando a variável
    $execsql=pg_query($linkpg,$cmdsql);
     printf("<table border=1>\n");
    printf("<tr><td>Cliente</td>
                <td>Produto</td>
                <td>Quantidade</td>
                <td>Dt Venda</td></tr>\n");

     WHILE ( $reg=pg_fetch_array($execsql) )
     { # exibindo os dados de medicos
       printf(   
              "<tr> 
                <td>$reg[pknfvendasitens]</td>
                <td>$reg[fkcliente]-$reg[txnomecliente]</td>
                <tr><td>$reg[fkproduto]-$reg[txnomeprod]</td>
                <td>$reg[qtdvendida]</td>
                <td>$reg[dtvenda]</td>
              </tr>\n");
     }
     printf("</table>\n");


    break;
  }
}
print("</body>\n</html>\n");

?>

 

Link para o comentário
Compartilhar em outros sites

Consegui arrumar tudo pessoal, agora preciso fazer o seguinte, tenho duas colunas, uma q mostra a quantidade de produtos, e outra o preço, preciso criar uma outra linha com nome total e nessa linha exibir o total da coluna quantidade de produtos e o total de preço. Segue o codigo:

<?php
# Um PRG Recursivo usa um conceito de lógica de programação para diminuir a quantidade de arquivos abertos no mesmo diretório.
# No PHP, usa-se uma função de ambiente para construção de Prgs. Recursivos.
# ISSERT() retorna True/False para a existencia de valor em uma variável.
# então uma variável de nome bloco pode ser avaliada e a partir de seu valor decide-se
# qual bloco de comandos será executado.
$bloco=( ISSET($_POST['bloco']) ) ? $_POST['bloco'] : 1;
print("<html>\n<body>\n\n");
switch (TRUE)
{
  case ( $bloco==1 ):
  { # Este bloco será executado na primeira 'rodada' do programa
    # Aqui monta-se o form e deve-se passar o valor de bloco para 2 em modo oculto
    printf("<form action='./relatorio02.php' method='POST'>\n");
    printf("<input type='hidden' name='bloco' value=2>\n");
    printf("Data inicio:   <input type='date' name='dtini' <br>\n");
    printf("Data termino:  <input type='date' name='dtfim' <br>\n");
    printf("<input type='submit' name='acao' value='Enviar'>\n");
    printf("</form>\n");
    break;
  }
  case ( $bloco==2 ):
  { # Aqui se executa a construção do relatório.
    # conectando ao bd
    # Conectando o SGBD POSTGRSQL
    $host='localhost';
    $porta='5432';
    $dbname='lbd2019noite';
    $user='postgres';
    $senha='postgres';
    $string="host='".$host."' port=".$porta." dbname='".$dbname."' user='".$user."' password='".$senha."'";;
    $linkpg=pg_connect($string) or die ("Problemas para conectart ao BD");

    # Montando o comando que exeuta as junções e seleção de dados das tabelas envolvidas.
    $cmdsql="SELECT d.fkcliente,
                    l.txnomeprod,
                    c.txnomecliente,
                    f.pknfvendasitens,
                    SUM (f.qtvendida) as totqtd,
                    SUM (l.vlpreco) as totpreco,
                    d.dtvenda

                    FROM nfvendas as d inner join nfvendasitens as f ON d.pknfvenda=f.fknfvenda
                                            inner join produtos as l on f.fkproduto=l.pkproduto
                                            inner join clientes as c on d.fkcliente=c.pkcliente
                    WHERE dtvenda BETWEEN '$_REQUEST[dtini]' AND '$_REQUEST[dtfim]'
                    GROUP BY f.pknfvendasitens, d.fkcliente, c.txnomecliente, f.fkproduto, l.txnomeprod, f.qtvendida, d.dtvenda, l.vlpreco
                    ORDER BY f.pknfvendasitens, d.fkcliente, c.txnomecliente, f.fkproduto, l.txnomeprod, f.qtvendida, d.dtvenda, l.vlpreco";

    # executando a variável
    $execsql=pg_query($linkpg,$cmdsql);
     printf("<table border=1>\n");
    printf("<tr><td>Código da N.F.</td>
                <td>Cliente</td>
                <td>Produto</td>
                <td>Quantidade</td>
                <td>Preço</td>
                <td>Dt Venda</td></tr>\n");



     WHILE ( $reg=pg_fetch_array($execsql) )
     { # exibindo os dados de medicos

       printf("<tr><td>$reg[pknfvendasitens]</td>
                   <td>$reg[fkcliente]-$reg[txnomecliente]</td>
                   <td>$reg[txnomeprod]</td>
                   <td>$reg[totqtd]</td>
                   <td>$reg[totpreco]</td>
                   <td>$reg[dtvenda]</td></tr>\n");
     }
     printf("</table>\n");
      break;
  }
}
print("</body>\n</html>\n");

?>

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...