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

I-NOZex

[Resolvido] Query para selecionar dados distinctos se coluna nao tiver o valor

Mensagens Recomendadas

I-NOZex    146
I-NOZex

Boas malta,

tenho uma tabela do seguinte género:

pE2pUoK.jpg

e eu preciso de uma query que mostre todos os campos, mas fazendo algo como DISTINCT á coluna message, e que nao contenham a language pt

por exemplo, se a tabela tivesse so esses registos apresentados em cima, queria que mostras-se message Action

Nao sei se me fiz entender muito bem...

Isto é uma tabela de traduçoes, e no fundo o que quero é saber quais mensagens ainda nao estão traduzidas para PT

Alguem ajuda? Obrigado (:

Eu ja tentei com o distinct mas nao tou a conseguir chegar bem...

Quando sao assim querys mais complexas vejo-me mais grego :D

Editado por I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

Olá,

Acho que o que precisas é algo assim (fiz para SQL Server, mas facilmente conseguirás adaptar para MySQL):

SELECT DISTINCT MT.Message
   FROM my_table MT
   LEFT JOIN my_table MT2 ON MT.Message = MT2.Message AND MT2.language = 'PT'
   WHERE MT2.Message IS NULL

Espero ter ajudado,


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    146
I-NOZex

algo como isto ?

select *
 from my_table
where language = 'pt'
  and (tranlation == '' or translation is null)

tipo, a cena é que nao existem as colunas que não teem traduçao em portugues...

preciso de sei la, cruzar dados tipo:

verificar as traduçoes que ja existem em PT

e

verificar todas as traduçoes possiveis...

Olá,

Acho que o que precisas é algo assim (fiz para SQL Server, mas facilmente conseguirás adaptar para MySQL):

SELECT DISTINCT MT.Message
   FROM my_table MT
   LEFT JOIN my_table MT2 ON MT.Message = MT2.Message AND MT2.language = 'PT'
   WHERE MT2.Message IS NULL

Espero ter ajudado,

é isto tudo!

SELECT DISTINCT MT.`message`
   FROM `translation` MT
   LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
   WHERE MT2.`message` IS NULL

soque falta mostrar todas as colunas...

Editado por I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

SELECT DISTINCT MT.`message`
   FROM `translation` MT
   LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
   WHERE MT2.`message` IS NULL

soque falta mostrar todas as colunas...

isso não parece funcionar, porque parece ser implícito que exista a entrada :

message |  translation | language | category
ping    |              | pt       | ping

porque caso contrário não existe registo para se fazer a relação JOIN ...

tens estes registos ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    146
I-NOZex

isso não parece funcionar, porque parece ser implícito que exista a entrada :

message |  translation | language | category
ping    |              | pt       | ping

porque caso contrário não existe registo para se fazer a relação JOIN ...

tens estes registos ?

mas funciona

eu fiz contas, atraves de algumas querys e eis os stats:

total messages -> 662 (select distinct message)

total messages em pt -> 142 (SELECT count(language) FROM translation where language='pt')

total messages nao traduzidas em pt -> 520 (com essa query do join)

142 + 520 = 662

Editado por I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

tipo, a cena é que nao existem as colunas que não teem traduçao em portugues...

preciso de sei la, cruzar dados tipo:

verificar as traduçoes que ja existem em PT

e

verificar todas as traduçoes possiveis...

é isto tudo!

SELECT DISTINCT MT.`message`
FROM `translation` MT
LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
WHERE MT2.`message` IS NULL

soque falta mostrar todas as colunas...

Olá,

Porque é que queres mostrar todas as colunas se o que pretendes é identificar quais os tipos de "message" que estão em falta para determinado idioma?


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    146
I-NOZex

para criar um dataprovider.

eu fiz assim:

SELECT DISTINCT(MT.`message`), MT2.`translation`, MT2.`language`, MT2.`category`
   FROM `translation` MT
   LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
   WHERE MT2.`message` IS NULL

ta correcto não ta?

obrigado

Editado por I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

Não deves precisar do DISTINCT e não deverás precisar das colunas da tabela MT2, mas sim MT (uma vez que no WHERE está explícito que MT2.message deverá ser NULL - sendo essa coluna a NULL, as outras também serão NULL.

Assim, deverá ser isto que precisas:

SELECT MT.`message`, MT.`translation`, MT.`language`, MT.`category`
   FROM `translation` MT
   LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
   WHERE MT2.`message` IS NULL


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    146
I-NOZex

Não deves precisar do DISTINCT e não deverás precisar das colunas da tabela MT2, mas sim MT (uma vez que no WHERE está explícito que MT2.message deverá ser NULL - sendo essa coluna a NULL, as outras também serão NULL.

Assim, deverá ser isto que precisas:

SELECT MT.`message`, MT.`translation`, MT.`language`, MT.`category`
   FROM `translation` MT
   LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
   WHERE MT2.`message` IS NULL

nao, assim aparecem todas as traduçoes existentes, excepto as PT, existentes ou nao...

da outra forma, aparece tudo null, excepto a message, de certa forma é isso que acabo por percisar... mas ha forma de dar logo valor ao campo LANGUAGE e CATEGORY?

Obrigado

Editado por I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

Acho que percebi o que pretendes - colocar os campos language e category como "omissão" e deixar o translation vazio. É isto?

Se for isso que pretendes, à partida será desta forma (+/- ajuste):

SELECT MT.`message`, '' AS `translation`, `pt` AS `Language` , `yum` AS `category`
   FROM `translation` MT
   LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
   WHERE MT2.`message` IS NULL

Espero ter ajudado,


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    146
I-NOZex

É isso tudo!! :D

muito obrigado mesmo!

pensava que o AS era so para definir o nome das colunas... algo que ja aprendi tambem agora :D

como eu quero, fica entao assim:

SELECT DISTINCT(MT.`message`), '' AS `translation`, 'pt' AS `language` , 'yum' AS `category`
   FROM `translation` MT
   LEFT JOIN `translation` MT2 ON MT.`message` = MT2.`message` AND MT2.`language` = 'pt'
   WHERE MT2.`message` IS NULL

obrigado, sem a vossa ajuda acho que nao chegava la tao facilmente.

Diz-me, sabes de algum sitio, algum artigo ou site onde se possa aprender estas querys mais complexas?

Falo, coisas como multi query (select where select), joins, alias, groups... alguma sugestão sobre onde aprofundar o conhecimento?

Obrigado ;)

Editado por I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

obrigado, sem a vossa ajuda acho que nao chegava la tao facilmente.

É para isso que estamos aqui!

Diz-me, sabes de algum sitio, algum artigo ou site onde se possa aprender estas querys mais complexas?

Falo, coisas como multi query (select where select), joins, alias, groups... alguma sugestão sobre onde aprofundar o conhecimento?

Obrigado ;)

Sei para SQL Server, que é a minha especialidade.

Tens por exemplo:

Agora, para mysql não te sei dizer, mas concerteza que encontrarás na internet excelentes recursos como blogs e até videos no youtube.

Ajudei-te na query por analogia - o "core" das linguagens SQL é semelhante.

Abraço


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link 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.