Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Consulta sql, mesma coluna retorno diferente

Olá pessoal,

Estou com uma duvida que me parece muito boba, mas não estou conseguindo resolver...

Criei no banco e na tabela um campo boolean CONCLUIDO.

Preciso porém fazer uma consulta e retornar o total e os resultados que são true?

Como fazer uma função com essa situação?

Entre algumas abordagens, tentei por ultimo separar e fazer duas consultas diferentes, mas está retornando que não pode converter em string... :'(

function consultaPorCentoConcluido() {
    $resultado = mysqli_query($this->conexao, "SELECT count(concluido) as 'concluido_total' FROM produtos WHERE concluido = 1");

    return $resultado;
}

function consultaPorCentoConcluidoTotal() {
    $resultado = mysqli_query($this->conexao, "SELECT count(concluido) as 'concluido_total' FROM produtos");

    return $resultado;
}

}

Mas eu tenho quase certeza que tem um método muito prático e funcional para fazer tal consulta, mas não consegui ainda aplicar... Poderiam me ajudar?

7 respostas

Nesse caso você precisa passar o resultado para um array e retornar esse array.

$produtos = array();
        $resultado = mysqli_query($this->conexao,SELECT count(concluido) as 'concluido_total' FROM produtos WHERE concluido = 1");
        while ($produto = mysqli_fetch_assoc($resultado)) {
            array_push($produtos, $produto);
        }     
         return $produtos;

Obrigado pelo retorno João,

Eu tinha tentado dessa forma, mas eu preciso saber o total e também os valores que estão concluidos...

Teria uma forma de consultar isso numa mesma query ou terei que chamar duas funções?

solução!

Eu faria em duas functions, uma com o total e outra com os produtos.

Para pegar o total, fiz um teste aqui:

function contaProdutos($conexao)     {
        $query = "select count(id) as total from produtos";        
        echo $query;
        $resposta = mysqli_query($conexao, $query);
        return mysqli_fetch_assoc($resposta);
    }

No html usei

$quantidade = contaProdutos($conexao);

Quantidade: <?=$quantidade["total"] ?>

Ótimo, vou utilizar duas funções João, obrigado!

Mas tem uma coisinha, está retornando esse erro;

Warning: Illegal string offset 'concluido_total' in /Applications/XAMPP/xamppfiles/htdocs/localhost_igor/Primeiro curso PHP/rodape.php on line 10

Como resolvo isso?

Como está o seu rodape.php? Cola aqui entre ```(3 crases) no começo e no final do código.

Ta assim:

Estou querendo aprender a usar os dados do banco para montar os graficos e neste caso experimentar numa barra de progresso...


</br>

<?php

$produtoDAO = new ProdutoDAO($conexao);

$concluido = $produtoDAO->consultaPorCentoConcluidoTotal();

$concluidoStr = $concluido["concluido_total"];

echo $concluidoStr;


?>

<footer>
    <div class="row"><p></p></div>
            <div class="col-md-12 column">
                <div class="jumbotron">
                <p>    Teste</p>
                    <div class="progress">
                        <div class="progress-bar" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="width: 30%">30%</div>
                    </div>
                </div> 
            </div>

    </footer>
    </div>
</div>
</div>

</html>

Poxa João!

Acabei de descobrir o que era, hehe!

Eu estava buscando no array o valor que eu precisava (concluido_total) porém o php pq algum motivo não estava gostando disso... Foi tirar essa declaração e tudo funcionou, hehe!!

declaração que estava causando o erro:

$concluidoStr = $concluido["concluido_total"];

Vejam como ficou:

<?php
$produtoDAO = new ProdutoDAO($conexao);
$concluidoTotal = $produtoDAO->consultaPorCentoConcluidoTotal();
$concluido = $produtoDAO->consultaPorCentoConcluido();

$porcentagemConcluido = 100 / $concluidoTotal * $concluido;

?>


</br>
<footer>


    <div class="row"><p></p></div>
            <div class="col-md-12 column">
                <div class="jumbotron">
                <p>    Teste</p>
                    <div class="progress">
                        <div class="progress-bar" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="width: <?=$porcentagemConcluido?>%"><?=substr($porcentagemConcluido, 0, 3)?>%</div>
                    </div>
                </div> 
            </div>

    </footer>
    </div>
</div>
</div>

</html>

Valeu pela moral João!