Alguém sabe me dizer porque este SELECT abaixo no MYSQL está pegando o maior ID corretamente, mas os campos (valor, data e status) não trazem as informações do maior ID retornado. O SELECT está pegando o maior ID, mas as informações dos campos (valor, data e status) retornados são de outro ID.
$this->db->query("SELECT max(id), valor, afiliado_id, data, status FROM afiliado_saque_logs WHERE afiliado_id = 27");
Já se eu utilizar o select abaixo não traz nada, sendo que existem as informações no banco e não sei porque não retorna nenhum resultado.
select * from afiliado_saque_logs where id = (select max(id) from afiliado_saque_logs) and afiliado_id = 27
É justamente o que falo no post! Eu pego o maior ID, porem as informações retornadas dos campos (valor, data e status) não são do maior ID retornado pelo select, são de outro ID.
A função MAX() do SQL retorna um único valor. Isso significa que o simples fato de defini-la no select não irá trazer qualquer outro valor se não o maior id, trazendo todos os demais resultados como se a função não tivesse sido definida. Para que ela funcione como você quer, deve fazer algo como:
SELECT id, valor, afiliado_id, data, status
FROM afiliado_saque_logs
WHERE id = (SELECT MAX(id) FROM afiliado_saque_logs);
Eu faço desta forma que você citou e funciona, porem quando coloco o (afiliado_id = 27) da pessoa que eu quero trazer o maior ID com os campos (valor, data, status) aí não retorna nada conforme o select abaixo, sendo que existem informações para o afiliado_id = 27.
SELECT id, valor, afiliado_id, data, status
FROM afiliado_saque_logs
WHERE id = (SELECT MAX(id) FROM afiliado_saque_logs) and afiliado_id = 27
Sim @Dragoon é MySQL. No caso, quis mostrar para ele como a função MAX funciona e, nesse como deveria ser o seu uso naquele caso específico.
Obs.: sugiro que se faça como o @Dragoon informou:
SELECT * FROM afiliado_saque_logs ORDER BY id DESC LIMIT 1;
As vezes ‘traduzir’ o comando/consulta ajuda a entender melhor:
“Selecione tudo da tabela afiliado_saque_logs ordenando pelo id de forma decrescente limitando-se a um resultado”.
Agora aqui:
SELECT id, valor, afiliado_id, data, status
FROM afiliado_saque_logs
WHERE id = (SELECT MAX(id) FROM afiliado_saque_logs) and afiliado_id = 27
Você quer que a consulta retorne o último registro e que seja com id 27? Confusão não? Se o id for 30, como ele vai trazer os dados do Id 30 e que seja igual a 27? Traduzindo o comando:
“Selecione id, valor, afiliado_id, data, status da tabela afiliado_id onde id é igual ao maior id da tabela e o id seja igual a 27”.
É isso mesmo? O que você realmente quer fazer?
Foi meio que mencionado acima, mas acredito que seu problema é que você quer mostrar os dados do maior id para o afiliado_id = 27. Ou seja, na sua primeira query de exemplo, você deveria mover esse WHERE para dentro da subquery:
select *
from afiliado_saque_logs
where id = (select max(id) from afiliado_saque_logs WHERE afiliado_id = 27)
Aquela sua primeira query vai lançar um erro na maioria dos bancos de dados, o Mysql aceita (ou costuma aceitar) mas nao sei qual o resultado esperado para isso.
Como faço para verificar se na tabela (afiliado_saque_logs) o afiliado_id = 27 possui algum registro com campo (status) = 0
select * from tabela
where afiliado_id = 27
and status = 0
Ou como faço para contar os registros onde o campo (status) é = 0 para o afiliado_id = 27
Pois eu preciso confirmar se afiliado_id = 27 possui algum registro com campo (status) = 0
select count(*) from tabela
where afiliado_id = 27
and status = 0
Marque como solução a resposta que te ajudou jovem, não sua própria resposta, caso tenha chegado a uma solução sozinho, aí neste caso coloque em sua resposta o que você fez para resolver e marque como solução!