Jump to content
I-NOZex

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

Recommended Posts

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

Edited by I-NOZex

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

beat2revolution.net

Share this post


Link to post
Share on other sites
HappyHippyHippo

algo como isto ?

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


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

Share this post


Link to post
Share on other sites
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,

  • Vote 1

Pedro Martins

Sharing is Knowledge!

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

Share this post


Link to post
Share on other sites
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...

Edited by I-NOZex

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

beat2revolution.net

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Edited by I-NOZex

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

beat2revolution.net

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Edited by I-NOZex

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

beat2revolution.net

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Edited by I-NOZex

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

beat2revolution.net

Share this post


Link to post
Share on other sites
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,

  • Vote 1

Pedro Martins

Sharing is Knowledge!

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

Share this post


Link to post
Share on other sites
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 ;)

Edited by I-NOZex

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

beat2revolution.net

Share this post


Link to post
Share on other sites
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

  • Vote 1

Pedro Martins

Sharing is Knowledge!

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.