• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

infopc

Sql complexo

6 mensagens neste tópico

boas, goatava de saber se é posivel fazer o seguinte

tenho duas tabelas, uma com noticias e outra com respectivas traduçoes, na sua estrotura mais basica elas são assim

noticias

-----------------------------

id          |    date

-----------------------------

1          |  2009-09-07

2          |  2009-09-06

traducao

-------------------------------

id      |      id_noticia      |  campo  |  traducao

----------------------------------------------------------------------

1      |      1                  | titulo        |  titulo 1

2      |      1                  | corpo      |  lorem ipsum 1

3      |      2                  | titulo        |  titulo 2

se eu fizer um left join do tipo

select noticias.*, traducao.campo, traducao.traducao from noticias left join traducao on noticas.id = traducao.id_noticia where noticias.id = 1

fico com

------------------------------------------------------------------

id | date          | campo    | traducao

------------------------------------------------------------------

1 | 2009-09-07 | titulo      | titulo 1

1 | 2009-09-07 | corpo      | lorem ipsum 1

-------------------------------------------------------------------

alguem conhece uma forma de me devolver os resultados desta forma?

------------------------------------------------------------------

id | date          | titulo    | corpo

------------------------------------------------------------------

1 | 2009-09-07 | titulo 1 | lorem ipsum 1

-------------------------------------------------------------------

utilizando somente sql

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta

SELECT 
   noticias.*, t1.traducao as titulo, t2.traducao as corpo 
FROM 
   noticias 
      JOIN traducao AS t1 ON t1.id_noticia = noticias.id 
      JOIN traducao AS t2 ON t2.id_noticia = noticia.id 
WHERE 
   noticias.id = 1 
   AND t1.campo = 'titulo' 
   AND t2.campo = 'corpo'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obg

o que tu sugeriste ta certo e vai dar jeito a questão é que nem sempre sei quantos registos existem para cada caso, por exemplo titulo pode não existir tal como corpo e pode existir sinopse, nota que eu não estou a usar tabelas reais da aplicação por isso tem que ser bem genérico

TY

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em vez de JOIN, pode-se sempre fazer LEFT JOIN com todos os registos que podem existir e ele retorna o seu valor caso existam ou null caso não.

De qualquer das formas, não estou a ver forma de usar a string contida num campo como nome de coluna...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois eu já me fartei de pesquisar e realmente acho que não há forma de fazer o que quero sem programação. obg vou fechar o tópico

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fazer isso com SQL, poderá não ser muito eficiente, mas se não tiveres muitos milhões de dados ou se o servidor for razoável não sentirás lentidão.

Para retirares isso como queres tens de fazer algo deste tipo:

SELECT n.id, n.date,
(select t.traducao from traducao t
where t.id_noticia  = n.id
and id = 1
) as titulo,

(select t.traducao from traducao t
where t.id_noticia  = n.id
and id = 2
) as corpo

FROM noticias n
WHERE noticias.id = 1

0

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