Ir para conteúdo

POWERED BY:

Arquivado

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

lucas

distinct

Recommended Posts

Olá,

 

bom direto ao assunto: tenho 2 tabelas

 

-> clientes

# id_cliente

nome

endereco ...

dt_cadastro

 

-> fotos

# id_foto

id_cliente

dt_cadastro

 

Gostaria de saber quais clientes postaram uma foto nova. P/ isso fiz o seguinte SQL.

 

SELECT c.id_cliente, nome, f.dt_cadastro FROM fotos f, clientes c WHERE (f.id_cliente = c.id_cliente) ORDER BY f.dt_cadastro DESC LIMIT 3

Não funcionou! :angry:

Foi me retornado várias vezes o mesmo cliente e uma foto q não foi a última q ele posto.

 

Logo resolvi colocar um DISTINCT.

SELECT DISTINCT(c.id_cliente), nome, f.dt_cadastro FROM fotos f, clientes c WHERE (f.id_cliente = c.id_cliente) ORDER BY f.dt_cadastro DESC LIMIT 3

Continuou com o mesmo problema. Resolvi tentar um GROUP BY

SELECT c.id_cliente, nome, f.dt_cadastro FROM fotos f, clientes c WHERE (f.id_cliente = c.id_cliente) GROUP BY c.id_cliente ORDER BY f.dt_cadastro DESC LIMIT 3

Bom, 3 clientes diferentes (o q eu realmente queria) MASSSS com a 1ª foto postada por ele e não a última.

 

Eu realmente não sei mais o q fazer.

Vi q na versão do MySQL 4.1 tem uma função "GROUP_CONCAT()". Parece ser super bacana. Olha a sintax dela:

 

GROUP_CONCAT([DISTINCT] expr [,expr ...]			 [ORDER BY {inteiro_sem_sinal | nome_coluna | formula} [ASC | DESC] [,col ...]]			 [SEPARATOR valor_str])

Parece q ela tem o q eu preciso, MASSS (denovo) eu não posso usar a v4.1 :angry: Estou sendo "obrigado" a usar a versão 4.0.24

 

Você ae, q tá lendo o post, pode me ajudar?? to fazendo isso com PHP.

 

Brigadu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

na aplicação fica fácil... porém com 2 consultas SQL...

agora direto na base, com uma consulta.. acreditoq você va ter q usar sub_querys... SELECT dentro de SELECT....

 

mas se conseguir, posta ai pra consultas futuras...

 

 

mas se você soh quiser usar para puxar a data da ultima postada.. acho q funfa assim...

SELECT c.id_cliente, nome, max(f.dt_cadastro) FROM fotos f, clientes c WHERE (f.id_cliente = c.id_cliente) GROUP BY c.id_cliente ORDER BY f.dt_cadastro DESC LIMIT 3

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.