Ir para conteúdo

Arquivado

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

rcamu

Ajuda com consulta Mysqli/PHP

Recommended Posts

Pessoal fiz a consulta abaixo para um relatório de produtos, só que preciso quebrar esse relatório por fabricante, como faço isso?

na consulta o fabricante vem na coluna e.nome fabri

SELECT cat.id, cat.nome, cat.ean, cat.atacado, cat.atacad, cat.id, cat.grupo, b.id, b.categoria, cat.fabricante fabricante, e.id, e.nome fabri,
SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS qtd_tipo_0,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) AS qtd_tipo_1,
SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) AS qtd_tipo_2,
SUM( IF( mov.tipo = 4, mov.qtd, 0 ) ) AS qtd_tipo_4,
SUM( IF( mov.tipo = 1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo = 2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo = 0, mov.qtd, 0 ) ) - SUM( IF( mov.tipo = 4, mov.qtd, 0 ) )  as Saldo,
(cat.atacado * 1.5) as minimo
FROM lc_detalhe AS mov
INNER JOIN lc_cat AS cat ON cat.id = mov.cat_id
INNER JOIN grupo as b on cat.grupo = b.id
INNER JOIN fabricante as e on cat.fabricante = e.id
WHERE atacad = "Sim"
GROUP BY categoria,cat.nome ASC
HAVING SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) )- SUM( IF( mov.tipo =4, mov.qtd, 0 ) ) >2

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, tetsuo disse:

Olá!
O que seria "quebrar por fabricante"?
O sr. precisa gerar uma tabela html para cada fabricante?

isso mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites
 
id nome ean atacado atacad id grupo id categoria fabricante id fabri qtd_tipo_0 qtd_tipo_1 qtd_tipo_2 qtd_tipo_4 Saldo minimo  
915 A001 - PEDRA POROSA - TRADICIONAL - 12X25MM - SHAN... 6955974103834 1.72 Sim 915 11 11 ACESSÓRIOS 3 3 SHANDA 38 4320 1 35 4246 2.580
916 A002 - PEDRA POROSA - TRADICIONAL - 15X25MM - SHAN... 6955974103841 2.72 Sim 916 11 11 ACESSÓRIOS 3 3 SHANDA 5 2880 0 0 2875 4.080

 

 

<tr>
              <td align="left">
                  <table width="100%" border="1" cellspacing="2" cellpadding="2">
                      <tr>
                      <td width="10%">EAN</td>
                        <td width="10%">Categoria</td>
                        <td>Fabricante</td>
                        <td>Produto</td>
                        <td>Quantidade Disponível</td>
                        <td width="10%">Preço Atacado</td>
                        <td width="10%">Preço Mínimo Venda</td>

                      </tr>
                      <?php
                        //  INICIA DETALHE DO PEDIDO
                        $l=1;
                        while ($lin=mysqli_fetch_array($d)){
                       $lin['atacado']  = number_format($lin['atacado'], 2, ',', '.');
                       $lin['minimo'] = number_format($lin['minimo'], 2, ',', '.');

                      ?>

                          <tr>
                          <td><?php   echo $lin['ean'];     ?></td>
                            <td><?php   echo $lin['categoria'];     ?></td>
                            <td><?php   echo $lin['fabri'];     ?></td>
                            <td><?php   echo $lin['nome'];     ?></td>
                            <td><?php   echo $lin['Saldo'];     ?></td>
                            <td>R$ <?php   echo $lin['atacado'];     ?></td>
                            <td>R$ <?php   echo $lin['minimo'];     ?></td>


                          </tr>

                      <?php $l = $l + 1; } ?>
                </table>
              </td>
            </tr>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer essa separação de duas formas:
1) fazer uma consulta para cada fabricante (várias buscas ao database)
3) escrever um script com algoritmo que separe por fabricante o array resultante (uma única busca ao database)

 

A sugestão número 1 é a mais fácil
Mas não sei dizer se é a melhor

Compartilhar este post


Link para o post
Compartilhar em outros sites

A opção 1 eu já pensei mas vai ficar muito pesado, vou ter que fazer mais de 12 select e mais de 1.800 itens.

A opção 2 seria legal mas ainda não sei como fazer esse tratamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 19/08/2018 at 12:08, rcamu disse:
 
id nome ean atacado atacad id grupo id categoria fabricante id fabri qtd_tipo_0 qtd_tipo_1 qtd_tipo_2 qtd_tipo_4 Saldo minimo  
915 A001 - PEDRA POROSA - TRADICIONAL - 12X25MM - SHAN... 6955974103834 1.72 Sim 915 11 11 ACESSÓRIOS 3 3 SHANDA 38 4320 1 35 4246 2.580
916 A002 - PEDRA POROSA - TRADICIONAL - 15X25MM - SHAN... 6955974103841 2.72 Sim 916 11 11 ACESSÓRIOS 3 3 SHANDA 5 2880 0 0 2875 4.080

 

 


<tr>
              <td align="left">
                  <table width="100%" border="1" cellspacing="2" cellpadding="2">
                      <tr>
                      <td width="10%">EAN</td>
                        <td width="10%">Categoria</td>
                        <td>Fabricante</td>
                        <td>Produto</td>
                        <td>Quantidade Disponível</td>
                        <td width="10%">Preço Atacado</td>
                        <td width="10%">Preço Mínimo Venda</td>

                      </tr>
                      <?php
                        //  INICIA DETALHE DO PEDIDO
                        $l=1;
                        while ($lin=mysqli_fetch_array($d)){
                       $lin['atacado']  = number_format($lin['atacado'], 2, ',', '.');
                       $lin['minimo'] = number_format($lin['minimo'], 2, ',', '.');

                      ?>

                          <tr>
                          <td><?php   echo $lin['ean'];     ?></td>
                            <td><?php   echo $lin['categoria'];     ?></td>
                            <td><?php   echo $lin['fabri'];     ?></td>
                            <td><?php   echo $lin['nome'];     ?></td>
                            <td><?php   echo $lin['Saldo'];     ?></td>
                            <td>R$ <?php   echo $lin['atacado'];     ?></td>
                            <td>R$ <?php   echo $lin['minimo'];     ?></td>


                          </tr>

                      <?php $l = $l + 1; } ?>
                </table>
              </td>
            </tr>

 

Olha como vem a minha consulta e como monto a tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 23/08/2018 at 10:43, tetsuo disse:

Sim, eu vi!
Mas sem saber como fica o objeto/array resultante da consulta ao database , não conseguirei te ajudar

 

então eu acho que não uso array, ele pega os dados do resultado do select e monta a tabela html conforme te mostrei

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha um peça do array

 

Array
(
    [0] => Array
        (
            [id] => 3
            [nome] => A001 - PEDRA POROSA - TRADICIONAL - 12X25MM - SHANDA
            [ean] => 6955974103834
            [atacado] => 1.72
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 3
            [fabri] => SHANDA
            [qtd_tipo_0] => 123
            [qtd_tipo_1] => 4320
            [qtd_tipo_2] => 1
            [qtd_tipo_4] => 3
            [Saldo] => 4193
            [minimo] => 2.580
        )

    [1] => Array
        (
            [id] => 3
            [nome] => A002 - PEDRA POROSA - TRADICIONAL - 15X25MM - SHANDA
            [ean] => 6955974103841
            [atacado] => 2.72
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 3
            [fabri] => SHANDA
            [qtd_tipo_0] => 125
            [qtd_tipo_1] => 2880
            [qtd_tipo_2] => 0
            [qtd_tipo_4] => 4
            [Saldo] => 2751
            [minimo] => 4.080
        )

    [2] => Array
        (
            [id] => 3
            [nome] => A003 - PEDRA POROSA - TRADICIONAL - 18X50MM - SHANDA
            [ean] => 6955974103858
            [atacado] => 4.04
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 3
            [fabri] => SHANDA
            [qtd_tipo_0] => 140
            [qtd_tipo_1] => 1152
            [qtd_tipo_2] => 0
            [qtd_tipo_4] => 8
            [Saldo] => 1004
            [minimo] => 6.060
        )

    [3] => Array
        (
            [id] => 3
            [nome] => AS-01 - PEDRA POROSA - REDONDA 200x27mm - GRANDE - SHANDA
            [ean] => 6955974103698
            [atacado] => 91.28
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 3
            [fabri] => SHANDA
            [qtd_tipo_0] => 10
            [qtd_tipo_1] => 60
            [qtd_tipo_2] => 0
            [qtd_tipo_4] => 2
            [Saldo] => 48
            [minimo] => 136.920
        )

    [4] => Array
        (
            [id] => 3
            [nome] => AS-02 - PEDRA POROSA - REDONDA 132x19mm - MÉDIA - SHANDA
            [ean] => 6955974103681
            [atacado] => 32.00
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 3
            [fabri] => SHANDA
            [qtd_tipo_0] => 53
            [qtd_tipo_1] => 84
            [qtd_tipo_2] => 0
            [qtd_tipo_4] => 2
            [Saldo] => 29
            [minimo] => 48.000
        )

    [5] => Array
        (
            [id] => 3
            [nome] => AS-03 - PEDRA POROSA - REDONDA 107x19mm - PEQUENA - SHANDA
            [ean] => 6955974103674
            [atacado] => 25.05
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 3
            [fabri] => SHANDA
            [qtd_tipo_0] => 56
            [qtd_tipo_1] => 72
            [qtd_tipo_2] => 0
            [qtd_tipo_4] => 0
            [Saldo] => 16
            [minimo] => 37.575
        )

    [6] => Array
        (
            [id] => 1
            [nome] => GP-420 REDE SUNSUN PARA PEIXES 10CM
            [ean] => 6955974101519
            [atacado] => 4.75
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 1
            [fabri] => SUNSUN
            [qtd_tipo_0] => 192
            [qtd_tipo_1] => 288
            [qtd_tipo_2] => 0
            [qtd_tipo_4] => 1
            [Saldo] => 95
            [minimo] => 7.125
        )

    [7] => Array
        (
            [id] => 1
            [nome] => GP-421 REDE SUNSUN PARA PEIXES 12CM
            [ean] => 6955974101526
            [atacado] => 5.57
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 1
            [fabri] => SUNSUN
            [qtd_tipo_0] => 123
            [qtd_tipo_1] => 288
            [qtd_tipo_2] => 0
            [qtd_tipo_4] => 1
            [Saldo] => 164
            [minimo] => 8.355
        )

    [8] => Array
        (
            [id] => 1
            [nome] => GP-423 REDE SUNSUN PARA PEIXES 20CM
            [ean] => 6955974101540
            [atacado] => 9.44
            [atacad] => Sim
            [grupo] => 11
            [categoria] => ACESSÓRIOS
            [fabricante] => 1
            [fabri] => SUNSUN
            [qtd_tipo_0] => 129
            [qtd_tipo_1] => 288
            [qtd_tipo_2] => 144
            [qtd_tipo_4] => 5
            [Saldo] => 10
            [minimo] => 14.160
        )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
Tratarei a variável que guarda o array mostrado acima como: $result
proceda assim:

<?php
  // separar os dados por fabricante
  foreach ($result as $v) {

    // separa os dados produto do array:
    $produto = [
      $v['ean'],
      $v['categoria'],
      $v['nome'],
      $v['Saldo'],
      $v['atacado'],
      $v['minimo']
    ];

    // se já existe o fabricante em $dados
    if (isset($dados[$v['fabricante']])) {

      // acrescenta apenas o produto
      $dados[$v['fabricante']]['produtos'][] = $produto;

      // se ainda não existir o fabricante em $dados
    } else {

      // adiciona o fabricante e o produto à variável $dados
      $dados[$v['fabricante']] = [
        'fabri' => $v['fabri'],
        'produtos' => [
          $produto
        ]
      ];
    }
  }

  // TABELAS  -  agora, com os dados tratados, gerar as tabelas:

  // define o cabeçalho padrão para as tabelas:
  $thead = '<thead><tr>'
    . '<th>EAN</th>'
    . '<th>Categoria</th>'
    . '<th>Produto</th>'
    . '<th>Quantidade Disponível</th>'
    . '<th>Preço Atacado</th>'
    . '<th>Preço Mínimo Venda</th>'
    . '</tr></thead>';

  // inicia a variável que vai guardar as tabelas
  $table = '';
  foreach ($dados as $id => $v) {
    // inicia a primeira tabela
    $table .= '<table border="1">'
      . "<caption>$v[fabri]</caption>$thead<tbody>";
    // para cada produto, gerar uma linha da tabela
    foreach ($v['produtos'] as $produto) {
      $table .= '<tr><td>' . implode('</td><td>', $produto) . '</td></tr>';
    }
    $table .= '</tbody></table>';
  }

  // entrega as tabelas para o browser:
  echo $table;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
    • Por gersonab
      Bom dia
      estou com uma dúvida de como proceder, tenho uma tabela de categoria e uma de subcategoria, a categoria pode ter várias subs, até ai tranquilo, quando faço update de uma sub altero normalmente a quantidade deste, até aí normal, porém me deparei com uma situação um pouco diferente, vou tentar ser o mais claro possível, de certa forma algumas subs são comuns só mudando o nome praticamente, aí eu preciso que ao efetuar o update em umas destas este ocorra nas demais, tipo:
       
      Se o id da sub for 5 , eu preciso fazer o mesmo update nos ids 6 e 7 ;
       
      Se o id da sub for 9 , eu preciso fazer o mesmo update no id 10
       
      se for 2 , fazer o update somente neste
       
      ainda não estou conseguindo ver uma lógica para isso, e ou uma nova coluna para cadastrar em comum nestes casos.
       
      qual seria a melhor opção
    • Por JoaoSilva75
      oi pessoal
       
      se eu entrar no link dos desenvolvedores php pesquisasar quem é programador e enviar uma mesma mensagem para uns 6 ou 8 membros do forum serei advertido   ou é spam ???????
       
      procuro um programador php para me fazer algo 
       
      mas não tem como postar aqui nessa sessão
       
    • Por clovis.sardinha
      Tenho uma consulta de autocomplete no bd que funciona no servidor local e não roda no servidor da web. 
      Ao enviar a consulta no servidor local  aparece no console :Fetch terminou o carregamento: GET ".../Cidade?cidade=sao%20paulo". A pesquisa é feita normalmente.
      Quando mando a mesma pesquisa para o servidor web(locaweb) aparece no console: Fetch terminou o carregamento: GET "..../Cidade?cidade=sao%2520paul".
      O número 25 aparece só no servidor web. Pelo que pesquisei 25 significa %, ou seja, está duplicando o caractere %. 
      Não consegui utilizar nenhuma função para evitar que isto ocorra. Alguém sabe se há alguma configuração no servidor web que possa ser alterada para evitar essa duplicação?
       
    • Por gersonab
      Boa tarde, estou quebrando a cabeça aqui para somar os dados agrupados de vários itens distintos de uma tabela e inserir em outra. tipo :
      $consulta31 = $pdo->query("SELECT SUM(valoror) AS val1, SUM(metros) AS metr, orc, idcatc, idmate FROM orcamencli WHERE orc=$orc GROUP BY idcatc, idmate"); $user331 = $consulta31->fetch(PDO::FETCH_ASSOC); $orcx = $user331['orc']; $idcatcx = $user331['idcatc']; $val1x = $user331['val1']; $metrx = $user331['metr']; $idmatex = $user331['idmate']; o resultado de cada item agrupado eu faria um outro calculo separado para inserir em outra tabela, tipo ...
      a tabela acima eu teria algo assim :
       
      orcx = 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01
      idcatcx = 11 - 11 - 11 - 11 - 11 - 11 - 11 - 11 - 11
      val1x = 1,00 - 1,00 - 3,00 - 3,00 - 3,00 - 1,00 - 3,00 - 1,00 - 2,00
      metrx =  01 - 01 - 03 - 03 - 03 - 01 - 03 - 01 - 02
      idmatex =  11 - 11 - 21 - 21 - 21 - 31 - 31 - 31 - 31
       
      preciso inserir  na outra tabela o seguinte :
      orc = 01 - 01 - 01
      idcatc = 11 - 11 - 11
      val1 = 2,00 - 9,00 - 7,00 ( aqui não é só a soma dos valores , existe um outro cálculo )
      metr =  02 - 09 - 07
      idmate =  11 -  21 -  31
       
       a dúvida é --> como inserir estes valores separados de uma única vez em outra tabela.
×

Informação importante

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