Publicidade

halfar

resultado instrucao sql

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. 

 

0

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';

 

0

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

0

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.

0

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

  • Próximos Eventos

  • Conteúdo Similar

    • Por MrViniciusXD
      Sou novo aqui no forum, galera me ajuda por favor.
      Preciso muito desenvolver um codigo em php que acesse meu banco sql e selecione certos campos das tabelas(é um banco de dados de academia e eu preciso dar um select no acessos_dia e nome da pessoa (mas o nome esta em uma tabela diferente )  em uma determinado periodo que esta em formato datetime) e preciso filtrar com o distinct para nao repetir os alunos,
      e depois do select preciso saber quantas vez por semana as pessoas vem (um grafico, mas o grafico é de menos preciso mesmo da logica ) do tipo 15 pessoas vem 1 vez por semana 30 duas vezes por semana e assim por diante, preciso pelo menos da logica pq nao sei por onde começar, nao faço a minima idieia de como começar.
      ME AJUDAM POR FAVOR !
    • Por dutopfave
      Eae galera, estou com um problema,    tenho uma tabela CATEGORIAS, e uma tabela ANÚNCIOS,  e no site tem  uma listagem dessas categorias e na frente tem o total de anúncios equivalente a essa categoria.
       
      Ex.: tenho CATEGORIA:    Imoveis,  ai foi cadastrado 10 anúncios com a CATEGORIA imoveis.
       
      Categoria     | Anúncio
      Imoveis         |      10
      Automóveis  |       5
       
      ....
       
      no meu caso lista as categorias só q na contagem do anuncio não da certo
       
    • Por RanyBoy007
      Olá amigo meu problema é o seguinte eu tenho duas tabelas uma onde eu busco informações do banco de dados para mostrar na index o nome da tabela é sf_atualizar e outra onde quero realizar o INNER JOIN chamada sf_nomes,
       
      Na seleção de tabelas eu tenho:
       
      SELECT  a.id_nome,  b.id_nome, a.name_nome, b.name_nome
      FROM sf_atualizar
      INNER JOIN sf_nomes a ON a.id_nome=sf_atualizar.nome_a 
      INNER JOIN sf_time b ON b.id_nome=sf_atualizar.nome_b
       
      Sendo que id_nome está presente na tabela sf_nomes assim como o name_nome, e o nome_a e nome_b na tabela sf_atualizar
       
      basicamente se eu chamar no index $nome_a e $nome_b ele me retorna os id de cada nome pois na tabela sf_atualizar está apenas os id
      eu gostaria de associar o id de cara nome a seu nome na tabela sf_nomes, só que fazendo como no exemplo acima ele me retorna nomes apenas de acordo com o segundo id e não distintos
       
      ex:
      $nome_a contra $nome_b = 2 contra 3 ===> utilizando a chamada com o id
      $name_nome contra $name_nome = augusto contra augusto ===> sendo que gostaria que ele retornasse ==> Paulo contra Augusto
       
       
      Se alguém entendeu meu raciocínio e pudesse ajudar eu ficaria agradecido, obg a todos.
    • Por Gilberto Jr
      Pessoal, bom dia;
       
      Como eu posso fazer essa situação, eu tenho  dois select, dai imaginamos que seleciono no select GRUPO a opção 3, GRUPO 3, e no select DPTO eu seleciono o option 4, DPTO 4. E caso eu selecione outro GRUPO, o reseta o select DPTO.



      <span>GRUPO:</span>
      <select id="idcliente" name="rede" class="redee">
      <option value="#">SELECIONE O GRUPO</option>
      <option value="1">GRUPO 1</option>
      <option value="2">GRUPO 2</option>
      <option value="3">GRUPO 3</option>
      </select>


      <span>DPTO:</span>
      <select name="dpto" id="dpto">

      <option value="#">SELECIONE O DPTO</option>
      <option value="1">DPTO 1</option>
      <option value="2">DPTO 2</option>
      <option value="3">DPTO 3</option>
      <option value="4">DPTO 4</option>
      <option value="5">DPTO 5</option>
      <option value="6">DPTO 6</option>
      </select>

      [/CODE]  
      Fico grato se puderem me ajudar.
       
      Att;
      Gilberto Jr
    • Por lvsis
      Comecei a usar o PDO recentemente e estou tentando fazer uma consulta ao banco utilizando o prepare e bindValues. só que sempre é retornado 0 no numero de linhas afetadas. já no uso do insert tudo funcionou corretamente.
       
      código PHP
      $sql = $conexao->prepare("SELECT * FROM clientes WHERE endereco LIKE '%:pesquisa%' ORDER BY nome ASC;"); $sql->bindValue(':pesquisa', $pesquisa, PDO::PARAM_STR); $sql->execute(); $res = $sql->rowCount(); alguém pode me dizer onde se encontra o erro!!!!!!!!!!!!!