Ir para o conteúdo
lealdl

Consulta usando fetch_array só retorna um registro

Mensagens Recomendadas

lealdl

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

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

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

  • Voto 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl

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? 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

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.

Editado por 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl

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

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl

Não tenho a mínima idéia de como montar esse left join, considerando que os campos fazem parte de uma mesma tabela :(

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

é uma questão de estrutura das tabelas da BD.

como está feito, o mais simples é mesmo fazer a soma no PHP


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl

HappyHippyHippo, você se refere a programar via código? Havia pensado nisso, mas achei que seria mais complicado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl

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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lealdl
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:

 

 

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.