Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ggldsns

Ajuda com LEFT JOIN

Mensagens Recomendadas

ggldsns

Boas,

Estou neste momento a trabalhar num projecto com Django usando MySQL. O meu primeiro problema foi:

(De forma semi-abstracta)

mydatabase_votecontext

(id, name)

(1, Flavour)

(2, Smell)

(3, Usability)

(4, Size)

mydatabase_vote

(id, thing, context, user, vote)

(1, Potatoes, Flavour, Me, 2.0)

(2, Potatoes, Smell, Me, 4.3)

(3, Potatoes, Usability, Me, 4.0)

(4, Carrots, Flavor, Me, 3.0)

(5, Cars, Smell, Me, 4.2)

(6, Cars, Usability, Me, 4.9)

queria que, ao fazer um query por uma "thing" especifica, o resultado fosse:

(Carrots, Flavour, 2.0)

(Carrots, Smell, 0.0)

(Carrots, Usability, 0.0)

(Carrots, Size, 0.0)

Ou seja, aparecerem também os Context mesmo quando não houve um voto feito para "essa coisa nesse contexto".

Entretanto consegui isso através de uma sugestão que me foi feita: usando um LEFT JOIN:

SELECT mb.id, mb.name, COALESCE( AVG( vote ) , 0.0 )
FROM mydatabase_votecontext AS md 
LEFT JOIN mydatabase_vote ON ( mydatabase_vote.context_id = md.id 
                                        AND thing_id = 1) 
GROUP BY thing_id, name 
ORDER BY md.id

Agora o meu problema ficou mais complexo. Tenho também:

mydatabase_user

(id, ......)

mydatabase_facebookuser

(id, user_id, gender, ...)

E queria fazer uma média de votos, como já está, mas a filtrar por gender !

Ora eu não estou a conseguir fazer isso sem o resultado retornar sem as linhas respectivas aos contextos em que não houve votos.

Ou seja, se os votos tivessem sido:

(5, Cars, Smell, Me, 4.2) // Utilizador do sexo masculino

(6, Cars, Usability, Me, 4.9) // Utilizador do sexo masculino

O resultado seria

(Cars, Smell, 4.2 )

(Carrots, Usability, 4.9)

em vez de

(Cars, Flavour, 0.0)

(Cars, Smell, 4.2 )

(Carrots, Usability, 4.9)

(Carrots, Size, 0.0)

Agradeço toda a ajuda que me possam dar pois não tenho grande experiência na utilização de JOINs e não tenho conseguido encontrar a solução por mais maneiras que tenha experimentado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Usa as tags code apropriadas para se conseguir perceber isso.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.