lealdl Posted April 9, 2018 at 03:35 AM Report #610125 Posted April 9, 2018 at 03:35 AM 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
M6 Posted April 9, 2018 at 09:14 AM Report #610130 Posted April 9, 2018 at 09:14 AM Já executaste a query diretamente no MySQL para confirmar que a mesma está correta? 1 Report 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."
lealdl Posted April 9, 2018 at 12:03 PM Author Report #610137 Posted April 9, 2018 at 12:03 PM 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?
HappyHippyHippo Posted April 9, 2018 at 01:21 PM Report #610141 Posted April 9, 2018 at 01:21 PM tira o sum e diz o que aparece 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
lealdl Posted April 9, 2018 at 01:39 PM Author Report #610142 Posted April 9, 2018 at 01:39 PM 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
M6 Posted April 9, 2018 at 03:20 PM Report #610145 Posted April 9, 2018 at 03:20 PM (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 April 9, 2018 at 03:22 PM 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."
lealdl Posted April 9, 2018 at 07:41 PM Author Report #610150 Posted April 9, 2018 at 07:41 PM 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
lealdl Posted April 9, 2018 at 11:17 PM Author Report #610153 Posted April 9, 2018 at 11:17 PM Não tenho a mínima idéia de como montar esse left join, considerando que os campos fazem parte de uma mesma tabela 😞
M6 Posted April 10, 2018 at 09:16 AM Report #610154 Posted April 10, 2018 at 09:16 AM 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."
lealdl Posted April 10, 2018 at 02:23 PM Author Report #610163 Posted April 10, 2018 at 02:23 PM 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
HappyHippyHippo Posted April 10, 2018 at 02:34 PM Report #610164 Posted April 10, 2018 at 02:34 PM é 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 Portugol Plus
lealdl Posted April 10, 2018 at 09:20 PM Author Report #610172 Posted April 10, 2018 at 09:20 PM HappyHippyHippo, você se refere a programar via código? Havia pensado nisso, mas achei que seria mais complicado.
M6 Posted April 11, 2018 at 03:54 PM Report #610191 Posted April 11, 2018 at 03:54 PM 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."
lealdl Posted April 11, 2018 at 05:23 PM Author Report #610193 Posted April 11, 2018 at 05:23 PM Grato, M6! Irei tentar. Abraços!
lealdl Posted April 15, 2018 at 10:38 PM Author Report #610221 Posted April 15, 2018 at 10:38 PM 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!
lealdl Posted April 16, 2018 at 01:05 AM Author Report #610222 Posted April 16, 2018 at 01:05 AM 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:
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now