Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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')/applications/core/interface/imageproxy/imageproxy.php?img=&key=28afbb360db5c1b91c7f9cf48ddca8db0e348b5a600473bceae10c41869c0945" alt="" />
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.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
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](http://www.devmedia.com.br/t-sql-subqueries-onde-e-quando-utilizar/32072) artigo.
Experimenta assim: