Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

santos_s

Retornar ultimo valor

Recommended Posts

Boa tarde,


Estou querendo retorna o valor máximo de cada nome;

sendo que a consulta vai me trazer vários nomes;

esse é meu sql com parte do meu código:



$sql_vol_atual = mysql_query("SELECT * FROM semar_acomp_reser WHERE nome_acomp_reserv LIKE '$pesq_nome_reserv' ORDER BY nome_acomp_reserv DESC LIMIT 1");
$result_vol_atual = mysql_fetch_assoc($sql_vol_atual);
$vol_atual=$result_vol_atual['vol_atual_acomp_reser'];
echo $vol_atual


a consulta está me trazendo o ultimo valor do ultimo nome para todos os nomes

na tabela está assim:

nome1=14.360;

nome2=0.790;

nome3=0,280

está me retornando assim:

nome1=0,280

nome2=0,280

nome3=0,280

mais se faço a consulta individual me retorna o valor correto.



[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi ...

 

 

SELECT nome_acomp_reserv , max(vol_atual_acomp_reserv) max

FROM semar_acomp_reser

WHERE nome_acomp_reserv LIKE '$pesq_nome_reserv'

Group by nome_acomp_reserv

ORDER BY 2 desc

DESC LIMIT 1");

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mota,

não me retornou nada com resultado:

$sql_vol_atual = mysql_query("SELECT nome_acomp_reserv , max(vol_atual_acomp_reser) max FROM semar_acomp_reser WHERE nome_acomp_reserv LIKE '$pesq_nome_reserv' 
Group by nome_acomp_reserv ORDER BY 2 DESC LIMIT 1");

se colocar SELECT *, max...

me retorna somente o menor valor para todos os nomes.

 

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites
na tabela tenho o seguinte:


cod_acomp_reserv | nome_acomp_reserv | vol_atual_acomp_reserv | data_acomp

1 reservatorio1 1.500 15/03/2015

2 reservatorio2 5.623 10/03/2015

3 reservatorio3 2.568 08/03/2015

4 reservatorio1 1.000 30/03/2015

5 reservatorio3 3.000 01/04/2015


tenho que exibir a última atualização.


reservatorio1 1.000

reservatorio2 5.623

reservatorio3 3.000


[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não ficou claro o que quer encontrar, qual seria a lógica. O nome "reservatorio1" aparece duas vezes nesta tabela, bem como "reservatorio3".

 

Seria uma soma dos valores por nome, ou a última data?

 

É preciso formular o problema, para entende-lo e encontrar a solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

na tabela tenho o seguinte:
cod_acomp_reserv | nome_acomp_reserv | vol_atual_acomp_reserv | data_acomp
1 reservatorio1 1.500 15/03/2015
2 reservatorio2 5.623 10/03/2015
3 reservatorio3 2.568 08/03/2015
4 reservatorio1 1.000 30/03/2015
5 reservatorio3 3.000 01/04/2015
tenho que exibir a última atualização.
reservatorio1 1.000
reservatorio2 5.623
reservatorio3 3.000
[]s

 

 

Use um subselect com max

select *
FROM nome_acomp_reserv s1
where data_acomp = (select max(data_acomp)
                    from semar_acomp_reser s2
                    where s2.nome_acomp_reserv = s1.nome_acomp_reserv)

Compartilhar este post


Link para o post
Compartilhar em outros sites
select * 
FROM semar_acomp_reserv s1 
where data_acomp = (select max(data_acomp)                     
                    from semar_acomp_reser s2                     
                    where s2.nome_acomp_reserv = s1.nome_acomp_reserv)

Creio que o erro foi o nome da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente Motta

 

$sql_vol_atual = mysql_query("select * FROM semar_acomp_reserv s1 where dt_acomp_reserv = (select max(dt_acomp_reserv)           
                    from semar_acomp_reser s2 where s2.nome_acomp_reserv = s1.nome_acomp_reserv)");

por enquanto estou ultilizando

assim me retornando apenas um resultado:

$sql_vol_atual = mysql_query("SELECT nome_acomp_reserv,vol_atual_acomp_reser FROM semar_acomp_reser WHERE nome_acomp_reserv = '$pesq_nome_reserv' ORDER BY nome_acomp_reserv DESC LIMIT 1");

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

tente Motta

 

$sql_vol_atual = mysql_query("select * FROM semar_acomp_reserv s1 where dt_acomp_reserv = (select max(dt_acomp_reserv)           
                    from semar_acomp_reser s2 where s2.nome_acomp_reserv = s1.nome_acomp_reserv)");

por enquanto estou ultilizando

assim me retornando apenas um resultado:

$sql_vol_atual = mysql_query("SELECT nome_acomp_reserv,vol_atual_acomp_reser FROM semar_acomp_reser WHERE nome_acomp_reserv = '$pesq_nome_reserv' ORDER BY nome_acomp_reserv DESC LIMIT 1");

[]s

 

até agora sem nenhum resultado.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Executou a sql que eu fiz diretamente no banco ?

 

Qual resultado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

retornou o resultado esperado :closedeyes:.

 

acho que é por conta do 1º select

$sql = mysql_query("SELECT * FROM cad_reser_semarh INNER JOIN usuarios ON
(cad_reser_semarh.usuarios_cod_usr=usuarios.cod_usr) INNER JOIN municipio_ibge ON (cad_reser_semarh.mun_cad_reser_semarh=municipio_ibge.cod_municipio) WHERE cod_cad_reser_semarh LIKE '$pesq_nome_reserv'");
tem como melhorar e colocar esse select? tentei usar UNION mais não consegui.
SELECT * 
FROM semar_acomp_reser s1
WHERE dt_acomp_reserv = ( 
SELECT MAX( dt_acomp_reserv ) 
FROM semar_acomp_reser s2
WHERE s2.nome_acomp_reserv = s1.nome_acomp_reserv )

 

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como a tabela semar_acomp_reser se relaciona com as tabelas da sua sql (cad_reser_semarh,usuarios e municipio_ibg) ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

a tabela semar_acomp_reser o campo nome_acomp_reserv(FK).

a tabela cad_reser_semarh o campo cod_cad_reser_semarh(PK) logo se relaciona com nome_acomp_reserv da tabela semar_acomp_reser. a tabela usuarios o campo cod_usr(PK) se relaciona com todas as tabelas com campo usuarios_cod_usr(FK).não há relacionamento com a tabela municipio_ibge.

 

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta vc adaptar a sua query a mais este relacionamento tratando a maior data como na minha sql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@mota tentei assim:

SELECT * 
FROM semar_acomp_reser s1, cad_reser_semarh
INNER JOIN usuarios ON ( cad_reser_semarh.usuarios_cod_usr = usuarios.cod_usr ) 
INNER JOIN municipio_ibge ON ( cad_reser_semarh.mun_cad_reser_semarh = municipio_ibge.cod_municipio ) 
WHERE cod_cad_reser_semarh LIKE '$pesq_nome_reserv'
AND dt_acomp_reserv = ( 
SELECT MAX( dt_acomp_reserv ) 
FROM semar_acomp_reser s2
WHERE s2.nome_acomp_reserv = s1.nome_acomp_reserv )

mais sempre me trás 3 resultados, independente da quantidade que tenha tenha no banco.

 

vou tentando aqui...

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.