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 andrevrcoelho
      Tenho uma tabela de status dos pedidos, eu gostaria de somar o valor dos pedidos que somente tem o status pendente. Uns tem pendente e aprovado, eu gostaria de somar somente os que tem status pendente. Anexei uma imagem de exemplo, mas a minha tabela no banco tem muito mais registros que isso.
       
       
      O que eu quero é o seguinte: somar somente pedidos que tem status "pendente". Se o pedido já teve pendente e agora tem "aprovado" não é para somar o "pendente" deles 

    • Por Marcelo Pereira da Costa
      Boa Dia pessoal
      Preciso de uma ajuda
      Eu tenho 3 tabelas (tab1, tab2 e tba3) em que preciso contar o numero de registros (reg1, reg2 e reg3) de cada uma delas, e estes registros devem ser armazenados em uma outra tabela (TabInfo)
       
      A contagem pode ser feito com o SELECT COUNT(*), mas o meu problema é adicionar estes registros na nova tabela (TabInfo).
       
                     TabInfo
      ___________________________
      campo1  campo2  campo3
      ___________________________
          reg1         reg2        reg3 
       
      Muito obrigado pessoal
    • Por Enlibra
      Olá,
      Pedia a vossa ajuda, pois já tentei de inumeras maneiras e não consigo dar a volta a este problema.
      Tenho um text (minuta de contrato) gravado num campo  de texto no mysql e queria que quando fizesse o mysql query select pudesse preencher automáticamente o contrato com os dados da empresa.
      Ex: "O cliente ________________ com a sede social em ______________". Em que os campos em espaço seriam preenchidos com os dados da tabela clientes. Já tentei '.$cliente'. <? echo $cliente ;?> entre outros mas nada.
      Alguém pode me ajudar por favor?
    • Por ndias
      Preciso fazer um select union usando tabelas distintas de banco de dados diferente...
       
      Por ex:
      $sql = "select email banco1.dbo.tabela "; $sql = $sql . "union "; $sql = $sql . "select email banco2.dbo.tabela "; Depois de abrir conexão (ADO) com o banco, costumo instanciar da seguinte maneira:
      $rs = $conn->execute($sql);     if(!$rs->EOF){         while (!$rs->EOF){         $rs->MoveNext();         }     }     $rs->Close();     $rs = null;  
      Como faço isso utilizando dois bancos na mesma consulta sql?
    • Por Marcelo Pereira da Costa
      Boa Tarde pessoal
      Preciso de uma ajuda
      Eu tenho 3 tabelas em que preciso contar o numero de registros de cada uma delas tab1, tab2 e tba3.
      O que pode ser feito rapidamente com SELECT count(*) tab1
       
      Mas eu preciso armazenar estes registros de cada tabela acima em uma outra tabela (Resultado). que tem os campos: Reg1, Reg2 Reg3.
      Sendo que nesta tabela Resultado, os números dos registros das tabelas tab1, tab2 e tab3 devem estar respectivamente armazenados nos campos Reg1, Reg2 Reg3 .
       
      Muito obrigado desde já
       
       
×

Informação importante

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

Este projeto é mantido e patrocinado pelas empresas:
Hospedado por: