Ir para conteúdo
halfar

resultado instrucao sql

Recommended Posts

A instrucao sql abaixo conta quantos registros contém  bananas e abacaxis:

 

Citar

$sql = "SELECT
count(produtos) as banana, ( SELECT count(produtos) as abacaxi FROM frutas  where produtos='abacaxi')  FROM frutas where produtos = 'banana'";

 

Este modo de montar a  instrução vi na net e funciona normal,  porém tem os seguintes detalhes:

 

Ao executar esta instrucao sql diretamente no phpmyadmin no PROVEDOR REMOTO, retorna corretamente os valores,  no entanto, na DESCRIÇÃO do campo abacaxi, veja como ficou na imagem em anexo:

 

bem, a imagem não subiu, apareceu um erro no momento do upload, vou tentar reproduzir a imagem aqui via texto mesmo:


 

Citar

 

banana ( SELECT count(produtos) as abacaxi FROM frutas where produtos='abacaxi')

2                 1

 


 

 

Veja que a descrição do campo banana retorna o valor 2 corretamente

 

e

 

no campo abacaxi, onde deveria aparecer apenas a palavra abacaxi mostra ao invés disto a descricao da instrucao sql referente ao abacaxi. Todavia o valor retornado para o campo abacaxi está correto.

 

 

Agora, quando executo o script ao recuperar os valores, retorna somente o valor da banana. O abacaxi retorna nulos.

 

A instrucao sql do script fiz assim:


 

Citar

 

$sql = "SELECT
count(produtos) as banana, ( SELECT count(produtos) as abacaxi FROM frutas  where produtos='abacaxi')  FROM frutas where produtos = 'banana'";
$exec = $conn->query($sql);
$rows = $exec->fetchAll( PDO::FETCH_ASSOC );

 

$banana = $rows[0]["banana"];
$abacaxi = $rows[0]["abacaxi"];

 

echo "valor de banana: "  . $banana;
echo "valor de abacaxi: " . $abacaxi;
 


 

 

 

Alguém saberia como resolver este abacaxi??, pelo menos fazer aparecer o resultado no script?? No  phpMyadmin do servidor remoto nem precisa esquentar a cabeça. 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimenta assim:

 

SELECT COUNT(produtos) AS 'banana', (SELECT COUNT(produtos) FROM frutas WHERE produtos = 'abacaxi') AS 'abacaxi' FROM frutas WHERE produtos = 'banana';

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou,  corrigiu aquele resultado esquisito no provedor, e também está aparecendo agora o resultado correto do abacaxi...

 

só não entendi a lógica disso,  colocar o "AS ABACAXI" fora do parenteses do select

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica é a seguinte:

 

Ao utilizares uma subquery, o resultado vai ser interpretado como um campo normal da tabela, daí resulta que o alias tem de ser definido fora dos parentesis da subquery para ser "visto" pela consulta principal.

 

SELECT COUNT(produtos) AS 'banana', (SELECT COUNT(produtos) AS 'abacaxi' FROM frutas WHERE produtos = 'abacaxi') FROM frutas WHERE produtos = 'banana';

No caso acima, 'abacaxi' não existe no âmbito da consulta principal.

 

SELECT COUNT(produtos) AS 'banana', (SELECT COUNT(produtos) FROM frutas WHERE produtos = 'abacaxi') AS 'abacaxi' FROM frutas WHERE produtos = 'banana';

Neste caso sim. Vê o segundo SELECT como se fosse um campo de uma tabela para o qual estás a definir um alias. Mais informações sobre subqueries neste artigo.

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 netocazuza
      Gostaria que alguém me ajudasse a encontrar erro num código. Estou fazendo um curto na net, e tentando adaptar o código que funciona para ir aprimorando a aprendizagem. Então vou colocar dois códigos aqui, onde um funciona o outro não. O que funciona é o do curso com mais campos. O que fiz foi apenas adaptar esse código que funciona para uma quantidade bem menor, e ver se funciona. Os dois códigos abre o formulário, aparentemente consultam o banco com sucesso, porém só o original está alterando, certamente por algum erro meu. Mas já olhei trocentas vezes, postei dúvida lá no curso, e o cara não responde, então tô parado na aprendizagem por conta disso. Basicamente é um formulário de cadastro de transportadoras onde o usuário altera os dados de uma transportadora através desse formulário. Esse tá funcionando tudo certinho. Tentei reproduzir esse mesmo formulário, porém apenas com dois campos (cidade e estado), e mesmo assim não funciona. Lista certinho, mas não altera, por isso acho que é um erro simples. Segue os dois códigos pra que comparem:
      CÓDIGO QUE FUNCIONA:
      <?php require_once("conexao/conexao.php"); ?> <?php     if (isset($_POST["nometransportadora"])){         $nome = utf8_decode($_POST["nometransportadora"]);         $endereco = utf8_decode($_POST["endereco"]);         $cidade = utf8_decode($_POST["cidade"]);         $estado = $_POST["estados"];         $cep = $_POST["cep"];         $cnpj = $_POST["cnpj"];         $telefone = $_POST["telefone"];         $tID = $_POST["transportadoraID"];         // CRIAR O OBJETO PARA ALTERAR         $alterar = "UPDATE transportadoras ";         $alterar .= "SET ";         $alterar .= "nometransportadora = '{$nome}', ";         $alterar .= "endereco = '{$endereco}', ";         $alterar .= "cidade = '{$cidade}', ";         $alterar .= "estadoID = {$estado}, ";         $alterar .= "cep = '{$cep}', ";         $alterar .= "cnpj = '{$cnpj}', ";         $alterar .= "telefone = '{$telefone}' ";         $alterar .= "WHERE transportadoraID = {$tID}";         $operacao_alterar = mysqli_query($conecta, $alterar);         if (!$operacao_alterar){             die("Erro na alteração!");         }else {             header("location: listagem2.php");         }     }     // Consulta a tabela de transportadoras.     $tr = "SELECT * ";     $tr .= "FROM transportadoras ";     if (isset($_GET["codigo"])){         $id = $_GET["codigo"];         $tr .= "WHERE transportadoraID = {$id} ";     }else {         $tr .= "WHERE transportadoraID = 1 ";     }     $con_transportadora = mysqli_query($conecta, $tr);     if (!$con_transportadora){         die("Erro na consulta");     }     $info_transportadora = mysqli_fetch_assoc($con_transportadora);          // Consulta aos estados     $estados = "SELECT * ";     $estados .= "FROM estados ";     $lista_estados = mysqli_query($conecta, $estados);     if (!$lista_estados){         die("erro no banco");     } ?> <!doctype html> <html>     <head>         <meta charset="UTF-8">         <title>Curso PHP INTEGRACAO</title>                  <!-- estilo -->         <link href="_css/estilo.css" rel="stylesheet">         <link href="_css/alteracao.css" rel="stylesheet">     </head>     <body>         <?php include_once("_incluir/topo.php"); ?>                  <main>               <div id="janela_formulario">                 <form action="alteracao.php" method = "post">                     <h2>Alteração de Transportadoras</h2>                     <label for="nometransportadora">Nome da Transportadora</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["nometransportadora"]) ?>" name = "nometransportadora" id = "nometransportadora">                     <label for="endereco">Endereço</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["endereco"]) ?>" name = "endereco" id = "endereco">                     <label for="cidade">Cidade</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["cidade"]) ?>" name = "cidade" id = "cidade">                     <label for="estados">Estados</label>                     <select id = "estados" name = "estados">                         <?php                              $meuestado = $info_transportadora["estadoID"];                             while ($linha = mysqli_fetch_assoc($lista_estados)){                             $estado_principal = $linha["estadoID"];                             if ($meuestado == $estado_principal){                         ?>                             <option value="<?php echo $linha["estadoID"] ?>" selected>                                 <?php echo utf8_encode($linha ["nome"]) ?>                             </option>                             <?php                             } else {                              ?>                                 <option value="<?php echo $linha["estadoID"] ?>">                                 <?php echo utf8_encode($linha ["nome"]) ?>                                 </option>                         <?php                              }                             }                         ?>                                              </select>                     <label for="cep">CEP</label>                     <input type = "text" value = "<?php echo ( $info_transportadora["cep"]) ?>" name = "cep" id = "cep">                     <label for="telefone">Telefone</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["telefone"]) ?>" name = "telefone" id = "telefone">                     <label for="cnpj">CNPJ</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["cnpj"]) ?>" name = "cnpj" id = "cnpj">                     <input type = "hidden" name = "transportadoraID" value = "<?php echo $info_transportadora["transportadoraID"] ?>">                     <input type = "submit" value="Confirmar Alteração">                 </form>             </div>         </main>         <?php include_once("_incluir/rodape.php"); ?>       </body> </html>  
      CÓDIGO QUE NÃO FUNCIONA. (Lista tudo certinho, mas não altera, nem traz o estádo pré-checado).
      <?php require_once("conexao/conexao.php"); ?> <?php     if( isset($_POST["nomeCidade"]) ) {         $nomeCidade       = utf8_decode($_POST["nomeCidade"]);         $estado     = $_POST["estados"];         $cID        = $_POST["cidadeID"];                  // Objeto para alterar         $alterar = "UPDATE cidades ";         $alterar .= "SET ";         $alterar .= "nomeCidade = '{$nomeCidade}', ";         $alterar .= "estadoID = {$estado} ";         $alterar .= "WHERE cidadeID = {$cID} ";         $operacao_alterar = mysqli_query($conecta, $alterar);         if(!$operacao_alterar) {             die("Erro na alteracao");            } else {             header("location:alterarCidades.php");            }              }     // Consulta a tabela de cidades     $tr = "SELECT * ";     $tr .= "FROM cidades ";     if(isset($_GET["codigo"]) ) {         $id = $_GET["codigo"];         $tr .= "WHERE cidadeID = {$id} ";     } else {         $tr .= "WHERE cidadeID = 1 ";     }          $con_cidade = mysqli_query($conecta,$tr);     if(!$con_cidade) {         die("Erro na consulta");     }     $info_cidade = mysqli_fetch_assoc($con_cidade);          // consulta aos estados     $estados = "SELECT * ";     $estados .= "FROM estados ";     $lista_estados = mysqli_query($conecta, $estados);     if(!$lista_estados) {        die("erro no banco");      }     ?> <!doctype html> <html>     <head>         <meta charset="UTF-8">         <title>Alteração Cidades</title>         <!-- estilo -->         <link href="_css/estilo.css" rel="stylesheet">         <link href="_css/alteracao.css" rel="stylesheet">     </head>     <body>         <?php include_once("_incluir/topo.php"); ?>                  <main>             <div id="janela_formulario">                 <form action="alteracaoCidades.php" method="post">                     <h2>Alteração de Cidades</h2>                                          <label for="nomeCidade">Nome da Cidade</label>                     <input type="text" value="<?php echo utf8_encode($info_cidade["nomeCidade"])  ?>" name="nomeCidade" id="nomeCidade">                     <label for="estados">Estados</label>                     <select id="estados" name="estados">                          <?php                              $meuestado = $info_cidade["estadoID"];                             while($linha = mysqli_fetch_assoc($lista_estados)) {                                 $estado_principal = $linha["estadoID"];                                 if($meuestado == $estado_principal) {                         ?>                             <option value="<?php echo $linha["estadoID"] ?>" selected>                                 <?php echo utf8_encode($linha["nome"]) ?>                             </option>                         <?php                                 } else {                         ?>                             <option value="<?php echo $linha["estadoID"] ?>" >                                 <?php echo utf8_encode($linha["nome"]) ?>                             </option>                                                 <?php                                  }                             }                         ?>                     </select>                     <input type="hidden" name="cidadeID" value="<?php echo $info_cidade["cidadeID"] ?>">                     <input type="submit" value="Confirmar alteração">                                     </form>                </div>         </main>         <?php include_once("_incluir/rodape.php"); ?>     </body> </html>  
       
       
       
    • Por jdlucena
      SELECT datacc, horacc FROM R070ACC WITH (NOLOCK) WHERE numcad = '2676' AND DATACC between ('2018-16-04') and ('2018-15-05') and oriacc = 'E'  
      Na primeira coluna aparece o dia do mês repetido 4x, com registros diferentes na segunda coluna referente a essa data.  (ANEXO 01)
       
      Como faço para ficar na primeira coluna o dia e criar 4 colunas para os registros referente a esse mesmo dia?
       
      exemplo:
      DATA                         REG1                         REG2                         REG3                         REG4
      2018-04-16            723                             425                            783                             1040
      2018-04-17            733                             793                            1075                           423
      ...

      DATA REG1 REG2 REG3 REG4 2018-04-16 723 425 783 1040 2018-04-17 733 793 1075 423 ...  
    • Por Daniel Francisco
      Olá pessoal boa madrugada..
      estou com 1 problema, faz  uma semana que to aprendendo c# pra criar um painel pro meu jogo..
      a 2 dias não durmo(acredite.), tentando criar isto..
      queria fazer logar meu form usando SQL Server, ja tenho tudo instalado até db do próprio jogo..
      Login principal
      http://prntscr.com/juqk40
      Queria mostrar está tela quando autenticasse e logasse 
      http://prntscr.com/juqkaq
       
      por favor me ajudem :/
       
    • Por Eduardo Villa
      Salve galera,
       
      Estou trabalhando em um projeto com Codeigniter e me deparei com o seguinte problema:
      1) Ao utilizar uma conexão ODBC não consigo construir um select no model da seguinte forma:
               $this->test->where('xx',$id)->get('dddd'); mas até ai, tudo certo pois utilizei $this->teste->query('dddd'); e funcionou.
      2) No retorno desta consulta ($notas->result_array();) não me traz o nome das colunas...
       
      Exemplo:
      array(24) { ["0131890"]=> string(7) "0131890" ["2018-06-11"]=> string(10) "2018-06-11" [""]=> string(0) "" ["0"]=> string(1) "0" ["AVENIDA ENG, 2544"]=> string(17) "AVENIDA ENG, 2544"
    • Por Bruno Oliviera
      Bom dia estou tento um problema com uma consulta que esta demorado de mais se
      Select prd.EAN, prd.NOME, prd.Estoque_Atual, prd.Preco_Custo, prd.Venda_Vista, te.Nome_Razao, vendp.Quantidade from produto as prd inner join produto_fornecedor as prof on prd.Cod_Produto=prof.Codigo_Produto inner join fornecedor as te on te.Codigo=Codigo_Fornecedor inner join vendas_prods as vendp on prd.Cod_Produto=vendp.Cod_Produto where Codigo_Fornecedor=25 ; puder me ajudar 
×

Informação importante

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