Jump to content
Fórum Script Brasil
  • 0

Trazendo "trabalhos" Duplicados E Sem "nota"


heltonritter
 Share

Question

Antes que se assustem com a sql, deixa eu explicar como deve funcionar:

Quero retornar um registro por trabalho contendo:

trabalhos.cod_evento,

trabalhos.cod_categoria,

trabalhos.cod_area,

trabalhos.titulo_trabalho,

trabalhos.premio_pesquisador,

trabalhos.chave_trabalho,

status_trabalhos.cod_status,

status_trabalhos.trabalho_pago,

status_trabalhos.trabalho_aprovado,

status_trabalhos.tipo_apresentacao,

status_trabalhos.observacao_trabalho,

status_trabalhos.nota_trabalho,

status_trabalhos.data_status

na tabela "status_trabalhos" os avaliadores vão inserindo novos registros relacionados ao trabalho a cada avaliação, assim mantém-se um histórico de avaliação do trabalho (usando o campo data).

O que quero é a última avaliação do trabalho, aquela que contém o status "mais" recente.

select
  distinct(trabalhos.cod_trabalho),
  trabalhos.cod_evento,
  trabalhos.cod_categoria,
  trabalhos.cod_area,
  trabalhos.titulo_trabalho,
  trabalhos.premio_pesquisador,
  trabalhos.chave_trabalho,
  status_trabalhos.cod_status,
  status_trabalhos.trabalho_pago,
  status_trabalhos.trabalho_aprovado,
  status_trabalhos.tipo_apresentacao,
  status_trabalhos.observacao_trabalho,
  status_trabalhos.nota_trabalho,
  status_trabalhos.data_status
from
  trabalhos,
  status_trabalhos
where
 trabalhos.cod_trabalho=status_trabalhos.cod_trabalho
 and (trabalhos.cod_area=1
      or trabalhos.cod_area=47
      or trabalhos.cod_area=48
      or trabalhos.cod_area=49
      or trabalhos.cod_area=50
      or trabalhos.cod_area=51
      or trabalhos.cod_area=52
      or trabalhos.cod_area=54
      or trabalhos.cod_area=55
      or trabalhos.cod_area=56
      or trabalhos.cod_area=57
      or trabalhos.cod_area=58
      or trabalhos.cod_area=59
      or trabalhos.cod_area=60
      or trabalhos.cod_area=61
      or trabalhos.cod_area=62
      or trabalhos.cod_area=63
      or trabalhos.cod_area=64
      or trabalhos.cod_area=65
      or trabalhos.cod_area=66
      or trabalhos.cod_area=67
      or trabalhos.cod_area=68
      or trabalhos.cod_area=69
      or trabalhos.cod_area=70
      or trabalhos.cod_area=71
      or trabalhos.cod_area=72
      or trabalhos.cod_area=73
      or trabalhos.cod_area=16
      or trabalhos.cod_area=79
      or trabalhos.cod_area=80
      or trabalhos.cod_area=81
      or trabalhos.cod_area=74
      or trabalhos.cod_area=75
      or trabalhos.cod_area=76
      or trabalhos.cod_area=77
      or trabalhos.cod_area=78
      or trabalhos.cod_area=82
      or trabalhos.cod_area=46
      or trabalhos.cod_area=83 )
order by(trabalhos.cod_evento
         and trabalhos.cod_categoria
         and trabalhos.cod_area) ASC,
         status_trabalhos.nota_trabalho DESC,
         status_trabalhos.data_status DESC

Na linha:

where

trabalhos.cod_trabalho=status_trabalhos.cod_trabalho

and (trabalhos.cod_area=1

pensei em colocar uma subquery:

... trabalhos.cod_trabalho in (select cod_trabalho from status_trabalhos order by(data_status) DESC limit 0,1) ...

A princípio a lógica diz que daria certo, mas aí da um erro dizendo que o mysql nesta vesão não suporta LIMIT dentro de subquerys.

Alguma sugestão amigos?

Editando o próprio post ....

Esquecí de mostrar o resultado disso, com certeza ajuda:

15,2,18,66,"TESTE - A grande jornada da pesquisa","","45.1184940495",18,"N","S","?","Muito bem mano! Tá apresentável",5,1184941815

15,2,18,66,"TESTE - A grande jornada da pesquisa","","45.1184940495",17,"N","S","?","Muito bem mano! Tá apresentável",-1,1184940827

15,2,18,66,"TESTE - A grande jornada da pesquisa","","45.1184940495",16,"N","N","","Não avaliado nenhuma vez ainda ...",-1,1184940499

Os trabalhos não avaliados por padrão iniciam com a nota -1.

Neste caso eu queria obter o registro:

15,2,18,66,"TESTE - A grande jornada da pesquisa","","45.1184940495",18,"N","S","?","Muito bem mano! Tá apresentável",5,1184941815

obs: Hoje é dia do amigo, um grande abraço a todos!

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Resolví em parte o problema, a solução foi usar algumas views, já que não consegui usar limit 0,1 dentro da subquery que pretendia fazer.

Aqui apenas estou fazendo uma view para trazer os registros da tabela em ordem inversa, assim os primeiros registros são os últimos que foram inseridos. também podia fazer isso usando o campo "data_status"

CREATE view vstatus_trabalhos as select
 cod_status,
 cod_trabalho,
 trabalho_pago,
 trabalho_aprovado,
 tipo_apresentacao,
 observacao_trabalho,
 nota_trabalho,
 data_status
from
 status_trabalhos
order by(cod_status)DESC
Agora consigo dar um group by pelo campo cod_trabalho, assim tenho um registro por trabalho e sempre o mais atualizado, para isso eu uso a view de cima.
create view vultimostatus_trabalhos as
 select
  cod_status,
  cod_trabalho,
  trabalho_pago,
  trabalho_aprovado,
  tipo_apresentacao,
  observacao_trabalho,
  nota_trabalho,
  data_status
 from
  vstatus_trabalhos
 group by(vstatus_trabalhos.cod_trabalho)
E agora é só ser feliz...
select * from
 vultimostatus_trabalhos,
 trabalhos
where
  trabalhos.cod_trabalho=vultimostatus_trabalhos.cod_trabalho
Adicionando alguma condições ....
select * from
 vultimostatus_trabalhos,
 trabalhos
where
  trabalhos.cod_trabalho=vultimostatus_trabalhos.cod_trabalho
 and (trabalhos.cod_area=1
      or trabalhos.cod_area=47
      or trabalhos.cod_area=48
      or trabalhos.cod_area=49
      or trabalhos.cod_area=50
      or trabalhos.cod_area=51
      or trabalhos.cod_area=52
      or trabalhos.cod_area=54
      or trabalhos.cod_area=55
      or trabalhos.cod_area=56
      or trabalhos.cod_area=57
      or trabalhos.cod_area=58
      or trabalhos.cod_area=59
      or trabalhos.cod_area=60
      or trabalhos.cod_area=61
      or trabalhos.cod_area=62
      or trabalhos.cod_area=63
      or trabalhos.cod_area=64
      or trabalhos.cod_area=65
      or trabalhos.cod_area=66
      or trabalhos.cod_area=67
      or trabalhos.cod_area=68
      or trabalhos.cod_area=69
      or trabalhos.cod_area=70
      or trabalhos.cod_area=71
      or trabalhos.cod_area=72
      or trabalhos.cod_area=73
      or trabalhos.cod_area=16
      or trabalhos.cod_area=79
      or trabalhos.cod_area=80
      or trabalhos.cod_area=81
      or trabalhos.cod_area=74
      or trabalhos.cod_area=75
      or trabalhos.cod_area=76
      or trabalhos.cod_area=77
      or trabalhos.cod_area=78
      or trabalhos.cod_area=82
      or trabalhos.cod_area=46
      or trabalhos.cod_area=83)

order by(trabalhos.cod_evento
         and trabalhos.cod_categoria
         and trabalhos.cod_area) ASC,
         vultimostatus_trabalhos.nota_trabalho DESC

E está como eu preciso!!! UFA! essa construção cansou meus neurônios!

Valeu a quem leu! quem tiver uma sugestão mais simples.... por favor, poste aí!

Obrigado.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.5k
×
×
  • Create New...