Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
@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
Creio então não ter entendido o problema.
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
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.
>
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)Nada ainda,
vou tentando por aqui...
[]s
O que deu errado ?
não me retornou nada nenhum resultado.
[]s
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)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>
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
Executou a sql que eu fiz diretamente no banco ?
Qual resultado ?
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
Como a tabela semar_acomp_reser se relaciona com as tabelas da sua sql (cad_reser_semarh,usuarios e municipio_ibg) ?
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
Basta vc adaptar a sua query a mais este relacionamento tratando a maior data como na minha sql.
blz,
vou tentar aqui depois retorno.
[]s
@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
SELECT cr.cod_cad_reser_semarh, cr.nome_cad_reser_semarh, cr.cap_cad_reser_semarh, cr.profun_cad_reser_semarh, cr.local_cad_reser_semarh, cr.lat_cad_reser_semarh, cr.lon_cad_reser_semarh, cr.usuarios_cod_usr, cr.tipo_cad_reser_semarh, cr.mun_cad_reser_semarh, cr.sit_cad_reser_semar, sea.cod_semar_acomp_reser, sea.nome_acomp_reserv, sea.vol_atual_acomp_reser, sea.dt_acomp_reserv, sea.dt_cad_acomp_reserv, usr.nome_usr, m.nome_municipio,ac.cod_acao,ac.nome_acao AS tipo_reservatorio
FROM cad_reser_semarh AS cr
INNER JOIN usuarios AS usr ON ( cr.usuarios_cod_usr = usr.cod_usr )
INNER JOIN semar_acomp_reser AS sea ON ( cr.usuarios_cod_usr = sea.usuarios_cod_usr )
INNER JOIN acoes AS ac ON(cr.tipo_cad_reser_semarh=ac.cod_acao)
INNER JOIN municipio_ibge AS m ON ( cr.mun_cad_reser_semarh = m.cod_municipio )
WHERE cr.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 = sea.nome_acomp_reserv ) AND sea.nome_acomp_reserv LIKE '$pesq_nome_reserv'
Resolvido.
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");