Ir para conteúdo
annacaro

Query SQL - Joint Rows

Recommended Posts

Oi Pessoal, tudo bem? 

 

Tenho uma table no Mysql que guarda as formas de pagamento de cada venda realizada, porém são até 5 formas de pagamento que podem ser combinadas entre elas. 

No Mysql elas estão sendo gravadas em uma única table e para cada forma de pagamento utilizada é criada uma linha, sendo as colulas: entity_id / method_title/ payment_amount due_date /number_of_installments e value_of_the_installment. Veja exemplo:

 

Table com dados: webpos_order_payment

entity_id method_title payment_amount due_date number_of_installments value_of_the_installment
81 Entrada 341,3      
81 Boleto Bancário 3071,7 20/cada mês 11x U$ 279,25
81 Cartão de Crédito 2142 1 mes antes da viagem 5x U$ 428,00

 

Preciso fazer uma query que coloque todas essas formas de pagamento do mesmo entity_id em uma só linha. 

Consegui achar esse exemplo no fiddle (http://sqlfiddle.com/#!9/7ef46c/2/0) , e tentei adaptar, primeiro só testando 1 dos valores (payment_amount), mas está dando erro quando peço para executar. Alguém poderia me ajudar a entender o que eu fiz de errado para que eu possa finalizar o resto da query com os outros valores também? 

SELECT
    r0.entity_id, 
    r0.method_title, 
    r1.payment_amount AS "PA1",
    r2.payment_amount AS "PA2",
    r3.payment_amount AS "PA3"
   FROM
    (SELECT DISTINCT 
        entity_id, method_title
     FROM 
         order_payment
     ) r0
    LEFT JOIN results r1 
        ON r1.entity_id = r0.entity_id  AND r1.method_title = 'Entrada'
    LEFT JOIN results r2 
        ON r2.entity_id = r0.entity_id  AND r2.method_title = 'Boleto Bancário'
    LEFT JOIN results r3 
        ON r3.entity_id = r0.entity_id  AND r3.method_title = 'Cartão de Crédito'
ORDER BY
    r0.entity_id, r0.method_title ;

Mensagem de erro: 

Error executing query:
Select r0.entity_id, r0.method_title, r1.payment_amount As "PA1", r2.payment_amount As "PA2", r3.payment_amount As "PA3" From (Select Distinct entity_id, order_payment.method_title From order_payment) r0 Left Join results r1 On r1.entity_id = r0.entity_id And r1.method_title = 'Entrada' Left Join results r2 On r2.entity_id = r0.entity_id And r2.method_title = 'Boleto Bancário' Left Join results r3 On r3.entity_id = r0.entity_id And r3.method_title = 'Cartão de Crédito' Order By r0.entity_id, r0.method_title Limit 1000

 

Fico no aguardo da ajuda de vocês e já agradeço de antemão a ajuda. 

 

 

                       

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citar

Preciso fazer uma query que coloque todas essas formas de pagamento do mesmo entity_id em uma só linha.  

 

 

Tentou com GROUP_CONCAT ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, obrigada por responder... 

Na verdade andei pesquisando sobre o group_concat e na verdade o resultado é diferente do que preciso. Preciso que as linhas se transformem em colunas e no group_concat seria criada apenas uma coluna com separação de pontuação. 

Ex: entity_id        coluna2

       81                  Entrada; 341,30; Boleto Bancário; 3071,7; 20/cada mes; 11x; 

 

Está correto isso sobre o group_concat? Alguma outra sugestão de query? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise por PIVOT em Mysql , CASE , IIF.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

  • Conteúdo Similar

    • Por wilson c. antonio
      Eu recebo os dados via post, nome e cpf, mas minha consulta não retorna nenhum dado da tabela consultada.
      O que está errado?
      <?php include("../_conexao/funcoes.php"); $con=conectado(); #conferindo os dados recebidos via $_POST if(isset($_POST['btnLogin'])){ #addslashes(trim)remove as sobras de texto em branco dos campos $nome = addslashes(trim($_POST['nNome'])); $cpf = addslashes(trim($_POST['nCPF'])); } $sql=$con->prepare("SELECT * FROM bolsa WHERE bolsa.cpf = $cpf "); $sql->execute(); while($linha=$sql->fetch(PDO::FETCH_ASSOC)){ //paginação - somar quantidade de usuários $id_bolsa = $linha['id_bolsa']; $nome = $linha['nome']; $sobrenome = $linha['sobrenome']; $ddata = date('d/m/Y', strtotime($linha['dtprv'])); $nota = $linha['nota']; $acertos = $linha['acertos']; } ?> <input type="text" value="<?php echo $nota?>" readonly="true"/> <input type="text" value="<?php echo $cpf?>" readonly="true"/>  
    • Por Thiiiziiin
      Olá pessoal, como vão?
      Estou com o seguinte problema, tenho uma tabela em um banco de dados e estou pegando os valores para gerar gráficos, com a API Charts.js.
      Estou fazendo um gráfico dinâmico, em tempo real, porém, se eu insiro um dado no banco de dados, não consigo alterar no gráfico (é preciso dar refresh na página para alterar).
      Toda a conexão com o banco de dados está correta, pois se eu atualizo a página, o gráfico altera com os valores que defini.

      Eu fiz testes utilizando o math.random(), e funcionou, atualizava conforme os valores aleatórios gerados por essa função.
      Quando defino para ler do banco de dados, fica estático.
      Minha conclusão é que a variável de conexão do banco de dados não se altera em tempo real.

      Existe a possibilidade de atualizar a variável a cada segundo em PHP?
      Segue o código que estou fazendo:
       
      <?php include('conexao.php'); $select = $PDO->query("SELECT corrente FROM tbdados ORDER BY id DESC limit 1"); $select->execute(); $result = $select->fetch(); // retorno do banco de dados mysql_close($select); ?> // Abaixo é o javascript da API Charts.js modificada <script type="text/javascript"> var ctx = document.getElementById('myChart').getContext("2d"); var gradientStroke = ctx.createLinearGradient(0, 0, 0, 0); gradientStroke.addColorStop(0, '#FFC800'); var pointStroke = ctx.createLinearGradient(0, 0, 0, 0); pointStroke.addColorStop(0, '#3f3f3f'); var gradientFill = ctx.createLinearGradient(0, 250, 0, 50); gradientFill.addColorStop(0, "rgba(63, 63, 63, 0.7)"); gradientFill.addColorStop(1, "rgba(255, 182, 0, 1)"); var contador = 0; var corrente = <?php echo $result['corrente']; ?>; // variável que foi capturada do banco var segundos = 1000; <?php echo $rows; ?> var myChart = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", "", "", "", "" ], datasets: [{ label: "Corrente (A)", borderColor: gradientStroke, pointBorderColor: gradientStroke, pointBackgroundColor: gradientStroke, pointHoverBackgroundColor: pointStroke, pointHoverBorderColor: gradientStroke, pointBorderWidth: 5, pointHoverRadius: 10, pointHoverBorderWidth: 1, pointHitRadius: 25, pointRadius: 3, fill: true, backgroundColor: gradientFill, borderWidth: 2, data: [, , , , , , , , , ,] }] }, options: { legend: { position: "bottom", labels: { fontColor: 'rgba(255,255,255,0.5)' } }, scales: { yAxes: [{ ticks: { fontColor: "rgba(255,255,255,0.5)", fontStyle: "bold", beginAtZero: true, maxTicksLimit: 10, padding: 20, }, gridLines: { drawTicks: false, display: false } }], xAxes: [{ gridLines: { zeroLineColor: "transparent" }, ticks: { padding: 20, fontColor: "rgba(255,255,255,0.5)", fontStyle: "bold" } }] } } }); function adddata(){ myChart.data.labels.push(contador + " segundos"); myChart.data.labels.splice(0, 1); myChart.data.datasets[0].data.splice(0, 1); console.log(myChart.data.datasets[0].data); myChart.data.datasets[0].data.push(corrente); myChart.update(); contador+=(segundos / 1000); } setInterval(function(){ adddata(); },segundos); var option = { showLines: true, scales: { yAxes: [{ display: true, ticks: { beginAtZero:true } }] } }; $(function() { setTime(); function setTime() { var date = new Date().getTime(); var string = "Corrente:<br/><span class='corrente_valor'>"+corrente+"</span><br/>Amperes"; setTimeout(setTime, segundos); $('#correnteCirculo').html(string); } }); </script>  
    • Por PedroTodorovski
      Quais a vantagens e as desvantagens de desenvolver um menu dinâmico (banco de dados) ao invés de um menu estático? Estou desenvolvendo um ecommerce e tenho essa dúvida.
    • Por brunobos21
      Olá, eu criei um formulario que salva os dados em um banco de dados mysql, e criei uma pagina de relatorio para mostrar todo mundo que se cadastra nesse banco, até ai tudo certo, só que eu tenho um campo "Status" que eu queria colocar um checkbox para o administrador poder marcar esse campo e mudar no mysql o valor do Status para 1 sempre que clicar no botão atualizar, e se o administrador desmarcar antes apertar o botão Atualizar, não mudar na tabela. Já pesquisei em tudo quer canto e não achei, se puderem me ajudar enviando algum modelo de código ou algum tópico aqui do forúm que ja fale sobre isso, agradeço. Aqui está meu código:
      <?php // definições de host, database, usuário e senha $host = "host"; $banco = "banco"; $user = "user"; $pass = "pass"; $tbl_name="tabela";   $nome = $_POST['nome']; $numero = $_POST['numero']; $email = $_POST['email']; $cidade = $_POST['cidade']; $whatsapp = $_POST['whatsapp']; $data = $_POST['data']; $status = $_POST['status'];   // conecta ao banco de dados $con = mysql_pconnect($host, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR); // seleciona a base de dados em que vamos trabalhar mysql_select_db($banco, $con); // cria a instrução SQL que vai selecionar os dados $query = sprintf("SELECT * FROM Pesquisas"); // executa a query $dados = mysql_query($query, $con) or die(mysql_error()); // transforma os dados em um array $linha = mysql_fetch_assoc($dados); // calcula quantos dados retornaram $total = mysql_num_rows($dados); ?> <!DOCTYPE html> <html lang="en"> <head>     <title>Relatorio</title>     <meta charset="latin1_swedish_ci">     <meta name="viewport" content="width=device-width, initial-scale=1"> <!--===============================================================================================-->       <link rel="icon" type="image/png" href="images/icons/favicon2.ico"/> <!--===============================================================================================-->     <link rel="stylesheet" type="text/css" href="vendor/bootstrap/css/bootstrap.min.css"> <!--===============================================================================================-->     <link rel="stylesheet" type="text/css" href="fonts/font-awesome-4.7.0/css/font-awesome.min.css"> <!--===============================================================================================-->     <link rel="stylesheet" type="text/css" href="vendor/animate/animate.css"> <!--===============================================================================================-->     <link rel="stylesheet" type="text/css" href="vendor/select2/select2.min.css"> <!--===============================================================================================-->     <link rel="stylesheet" type="text/css" href="vendor/perfect-scrollbar/perfect-scrollbar.css"> <!--===============================================================================================-->     <link rel="stylesheet" type="text/css" href="css/util.css">     <link rel="stylesheet" type="text/css" href="css/main.css"> <!--===============================================================================================--> <script src="vendor/jquery/jquery-3.2.1.min.js"></script> <script type="text/javascript"> //--> </script> </head> <body> <form action=" " method="post">     <div class="limiter">         <div class="container-table100">             <div class="wrap-table100">                 <div class="table100">                     <table>                         <thead>                             <tr class="table100-head">                                 <th class="column1">Nome</th>                                 <th class="column2">Numero</th>                                 <th class="column3">Cidade</th>                                 <th class="column4">E-mail</th>                                 <th class="column5">Whatsapp</th>                                 <th class="column6">Tipo</th>                                 <th class="column6">Data</th>                                 <th class="column6">Status</th>                             </tr>                         </thead>                           <?php                         // se o número de resultados for maior que zero, mostra os dados                         if($total > 0) {                     // inicia o loop que vai mostrar todos os dados                     do {                         ?>                         <tbody>                                 <tr>                                     <td class="column1"><?=$linha['nome']?></td>                                     <td class="column2"><?=$linha['numero']?></td>                                     <td class="column3"><?=$linha['cidade']?></td>                                     <td class="column4"><?=$linha['email']?></td>                                     <td class="column5"><?=$linha['whatsapp']?></td>                                     <td class="column6"><?=$linha['tipo']?></td>                                     <td class="column6"><?=$linha['data']?></td>                                     <td class="column6">                                     <input type=checkbox name="banco[]" value="1"><?=$linha['status']?>                                     </td>                                 </tr>                                </tbody>                         <?php                     // finaliza o loop que vai mostrar os dados                     }while($linha = mysql_fetch_assoc($dados));                         // fim do if                         }                         ?>                     </table>                     <div class="container-contact2-form-btn">                                 <div class="wrap-contact2-form-btn">                                     <div class="contact3-form-bgbtn"></div>                                     <button class="contact2-form-btn" type="submit" value="Enviar" name="enviar">                                         Atualizar                                     </button>                                 </div>                             </div>                 </div>             </div>         </div>     </div> </form>   <!--===============================================================================================-->       <script src="vendor/jquery/jquery-3.2.1.min.js"></script> <!--===============================================================================================-->     <script src="vendor/bootstrap/js/popper.js"></script>     <script src="vendor/bootstrap/js/bootstrap.min.js"></script> <!--===============================================================================================-->     <script src="vendor/select2/select2.min.js"></script> <!--===============================================================================================-->     <script src="js/main.js"></script> </body> </html> <?php // tira o resultado da busca da memória mysql_free_result($dados); ?>
×

Informação importante

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