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 Philippe Luis
      Boa noite galera. Bom estou fazendo um sistema em php onde faço um SLECT para trazer resultados na pagina principal.
      Basicamente tenho lojas registradas no meu banco de dados e mostro elas para o usuário.
      O PROBLEMA:
      Meu select funciona certo e tudo mais. So que ele sempre mostra os mesmos resultados toda vez que o usuário entra no site, isso porque eu peço para mostrar resultados em ordem crescente de id. Queria que toda vez que o usuário entrasse na tela viesse resultados diferentes. Assim na tela principal sempre teria lojas diferentes. Isso só acontece hoje, quando eu insiro um novo registro na minha tabela.
       
      Agradeço de maais a ajuda de todos.
    • Por Mauryllio Ferreira
      Amigos, procurei algum tópico com a minha dúvida mas não encontrei.
       
      Tenho duas tabelas.
      As duas tabelas possuem a coluna "ID" sendo que na primeira tabela o "ID" não se repete, mas na segunda pode se repetir até 5x, pois cada ID pode possuir 5 produtos.
       
      Tabela 1:
      ID    Nome
      1     Primeiro
      2    Segundo
      3    Terceiro
       
      Tabela 2
      ID     Produto       Nível
      1       Frutas           1
      1       Carnes          2
      1       Cereais         3
      2       Limpeza       1
      2       Higiene         2
       
      O problema é que quando faço a consulta, as linhas se repetem por causa dos valores da tabela 2.
      Como eu poderia fazer uma consulta onde os resultados da da tabela 2 aparecessem em colunas diferentes, mas na mesma linha?
       
      O resultado esperado é esse:
       
      ID    Nível1       Nível2        Nível3 
      1     Frutas       Carnes      Cereais
      2     Limpeza    Higiene      Null
       
       
      Como as tabelas são muito grandes, coloquei apenas essas de exemplo.
    • Por Casas Junior
      Galera,

      Estou com uma dúvida que está me matando.. Tenho 2 tabelas que estão relacionadas:
      Usuarios (Campos: id, usuario, datacadastro, sexo, etc.......)
      Tab_Livros (Campos: id, usuario, livro1)

      Quando o usuário faz o login.. ele traz perfeitamente o nome do usuário que está logado, além dos demais dados que contém na Tabela Usuários (data cadastro, sexo.. etc).
      Porém, tudo que está na Tab_Livros, não puxa na session desse usuário que está logado.

      Segue o código de autenticação:
      <?php $usuario=$_POST['usuario']; $senha=$_POST['senha']; $sql = mysqli_query($conn, "SELECT * FROM usuarios WHERE usuario = '$usuario' and senha = '$senha'") or die (mysqli_error()); $row = mysqli_fetch_assoc($sql); if($row > 0) { session_start(); $_SESSION[ 'usuario' ] = $row[ 'usuario' ]; //armazenando usuario $_SESSION[ 'dados_user' ] = $row; //armazenando tudo em forma de array associativo echo "<center>Autenticação OK! Você será redirecionado, Aguarde!</center>"; echo "<script>loginsuccessfully()</script>"; } else { echo "<center>Senha ou User invalidos</center>"; echo "<script>loginfailed()</script>"; } ?>
      Segue a pagina index.php
      <?php include("classe/conexao.php"); $consulta = "SELECT * FROM usuarios INNER JOIN Tab_Livros ON usuarios.usuario = Tab_Livros.usuario LIKE usuarios.usuario and Tab_Livros.usuario = '".$_GET['usuario']."'"; $con = $mysqli->query($consulta) or die($mysqli->error); $usuario=$_GET['usuario']; ?> <?php session_start(); if((!isset ($_SESSION['usuario']) == true)){ unset($_SESSION['usuario']); header('location:login.php'); } ?> <p>Teste de Registros do usuário logado com 2 tabelas</p> <p> </p> <p>Usuário: <?php echo $_SESSION[ 'dados_user' ][ 'usuario' ]; ?><br> Registrou-se em: <?php echo $_SESSION[ 'dados_user' ][ 'datacadastro' ]; ?> <br> <p>Livro (Aqui deve aparecer o dado da Tab_Livros): <?php echo $_SESSION[ 'dados_user' ][ 'livro1' ]; ?>
      Help meeeeeeeeeee!! 
    • Por bernardosaltiel
      SELECT * FROM Cheque t, Cliente rec, Cliente pas, Cliente tit,STATUS s WHERE t.cdTitular = rec.id AND t.cdRecebidoDe = pas.id AND t.cdRepassadoPara = tit.id AND t.cdstatus = s.id
      Tenho esse sql. mas ele não lista os cdrepassado. Para que estão null, quero listar os que tem dados e os que tem campo null.
×

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: