Jump to content

Consulta usando fetch_array só retorna um registro


Recommended Posts

Posted

Pessoal, estou quebrando a cabeça, alguém poderia me ajudar?

Preciso filtrar o consumo dos hóspedes de um hotel, criei uma consulta, mas só está me retornando um registro (o primeiro).

eis meu código:

<?php
$conn  = mysqli_connect('localhost','root','','reservas');

$busca =  $_POST['busca'];

$query =mysqli_query($conn,"SELECT hospede, quarto, produto, qtde, valor_unit,
       total, sum(total)  as soma from consumo WHERE quarto LIKE '%$busca%'");
       
//$query = mysqli_query($conn, "SELECT distinct * FROM consumo WHERE quarto LIKE '%$busca%'");
$num   = mysqli_num_rows($query);
if($num >=0){

    while($row = mysqli_fetch_array($query)){
      
    echo $row['produto'];
    
    }

    //echo '  Quarto:  '.'</br>'. $row['quarto'].'<br/>'. ' HÓSPEDE:  '.$row['hospede'].'</br>'.' PRODUTO '.$row['produto'].'<BR/>'.'QTDE:  ' .$row['qtde'].'  VALOR      '.$row['valor_unit'].'<BR/>'.'TOTAL QUARTO      '.'<BR/>'.$row['soma'].'<br /><hr>';        
}else{


  echo "Registro não Encontrado!";
}

?>

*filtro em um campo digitando o numero do quarto, mas retorna somente um registro. Por exemplo, um hóspede consumiu 5 produtos, mas só me retorna o primeiro.

Onde estou errando no código?

Fico grato desde já, abraços

Luciano

Posted

Já executaste a query diretamente no MySQL para confirmar que a mesma está correta?

  • Vote 1
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

Olá, M6! Grato pela resposta! Sim, executo "SELECT hospede, quarto, produto, qtde, valor_unit,
       total, sum(total)  as soma from consumo WHERE quarto = 102", por exemplo. A query me retorna somente um registro, sendo que há vários produtos nesse mesmo quarto.

Não deveria retornar todos? 

Posted

Olá,"HappyHippyHippo" !

Lista todos os registros, mas não executa a soma total. Tenho somente o campo total individual.

Gostaria que me apresentasse assim, por exemplo: 

Quarto 102

Produto:

amendoim       Qtde 2  Valor Unit: 3,00  Total Item :      6,00

coca-cola lata  Qtde 2  Valor Unit: 3,50  Total Item :      7,00

                                                                Total Quarto : 13,00

Posted (edited)

Não consegues fazer isso só com uma query simples.

Ou agrupas os dados, com o sum, ou listas os dados.

Para fazeres o que queres tens de usar algo do tipo "left join" com duas queries, uma para listar os dados e outra para calcular o sum. Mas tens de ter atenção de que isso vai repetir o valor do sum em todas as linhas.

Edited by M6
Submeti sem querer antes de concluir a resposta.
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

Muito obrigado, vou reanalisar a query. Em princípio, achei que fosse algo com a query estar fora do laço. Não sou muito bom nessa lógica, mas vou dar uma estudada. 

Mas outra dúvida... se retornar algo assim... 

quarto1

 

produto   valor_unit qtde valor valor

quarto2

produto   valor_unit qtde valor valor

quarto3

produto   valor_unit qtde valor valor

Posted

Tens de ter em atenção que o SQL é uma linguagem de exploração de dados, ou seja, retorna informação existente na base de dados não tem como objetivo devolver informação formatada para apresentação.

Para usares uma tabela mais de uma vez numa query, basta dares um alias "... from tabela as t1, tabela as t2 ...", depois referes as tabelas pelo seu alias.

Podes também fazer uma view com o group by, por exemplo, e depois fazes o left join.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

Olá, M6! Qto à função da linguagem sql, sim, tenho ciência de que nao é para formatação. Foi só a maneira que achei para exemplificar o que eu queria.

Mas há possibilidade de dar aliases para a mesma tabela? Pois faço referência a uma única tabela, que é a "consumo". 

Grato mais uma vez, vou tentando. Abraços

Posted

Sim, podes dar alias as vezes que quiseres à mesma tabela.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

Olá amigos!
Novamente preciso de uma ajuda(espero que não haja mais,rs)

tenho um formulário de baixas de hóspedes, onde seleciono a data de saída e 
automaticamente o sistema está retornando o valor total da hospedagem.

Tenho também uma tabela de consumo dos hóspedes, em uma tela separada.
Preciso de uma trigger que, ao passar o status do quarto para 1(disponível),
automaticamente exclua o consumo para o quarto em que está sendo baixado.

Estou tendo dificuldades com a lógica, já que, selecionando o quarto manualmente no mysql, 
o trigger funciona perfeitamente.

Assim funciona:



CREATE TRIGGER baixa_consumo 
  AFTER UPDATE  ON quartos
  
FOR EACH ROW 
  begin
 
delete  FROM consumo 
  WHERE quarto = 101; 
 
end;

[/CODE]

Não estou sabendo como fazer para pegar o numero do quarto através do formulário.
Alguém pode me ajudar?
Grato!

Posted
2 horas atrás, lealdl disse:

Olá amigos!
Novamente preciso de uma ajuda(espero que não haja mais,rs)

tenho um formulário de baixas de hóspedes, onde seleciono a data de saída e 
automaticamente o sistema está retornando o valor total da hospedagem.

Tenho também uma tabela de consumo dos hóspedes, em uma tela separada.
Preciso de uma trigger que, ao passar o status do quarto para 1(disponível),
automaticamente exclua o consumo para o quarto em que está sendo baixado.

Estou tendo dificuldades com a lógica, já que, selecionando o quarto manualmente no mysql, 
o trigger funciona perfeitamente.

Assim funciona:

 



 

CREATE TRIGGER baixa_consumo 
  AFTER UPDATE  ON quartos
  
FOR EACH ROW 
  begin
 
delete  FROM consumo 
  WHERE quarto = 101; 
 
end;

[/CODE]

Não estou sabendo como fazer para pegar o numero do quarto através do formulário.
Alguém pode me ajudar?
Grato!

Pessoal, apanhei um pouco mas consegui resolver o problema do trigger. 

Achei mais fácil pela tabela de locaçoes, assim sempre que uma locação é baixada, o consumo relacionado também será!

O problema é que já havia atualizações com AFTER para essa tabela.

Mudei para BEFORE e o problema foi resolvido. Ficou assim:

		

		

CREATE TRIGGER baixa_consumo 
  BEFORE UPDATE  ON tb_locacoes
FOR EACH ROW
begin
DELETE FROM consumo 
  WHERE quarto = old.quarto;
 

END;

[/CODE]

Grato

 

2 horas atrás, lealdl disse:

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.