Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcelo2605

[Resolvido] Dois autores para um mesmo livro

Recommended Posts

Estou criando um banco de dados para uma livraria.

 

Criei uma tabela livros e uma tabela autores.

 

Cada livro pega o id do seu respectivo autor. Por exemplo:

 

Tabela autores:

 

id_autor: nome:

1 Autor 1

2 Autor 2

 

Tabela livros:

 

id nome: autor: id_autor

1 livro 1 Autor 2 2

 

Mas como faço quando um mesmo livro tiver mais de um autor?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você cria uma tabela auxiliar, que vai vincular os IDs de livro a autores, este cenário atende a maioria dos casos, você pode inclusive criar papeis diferentes, pois uma mesma pessoa numa obra ele pode ser o autor principal, mas em outra ele pode ter outra função, como tradutor ou ilustrador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ou- isto seguindo a boa ideia do Prog

 

<publicacao>----<publicacao_autor_papel>----------<autor>
               |
               |
               |
               A
               <papel>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá complicado criar as tabelas:

 

Tabela autores

id

autor

 

Tabela livros

id

id_auxiliar

titulo

 

Tabela auxiliar

id

id_livro

id_autor

 

É mais ou menos assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caio, tentei isso mas não deu:

 

SELECT livros.*, auxiliar.id_autor AS autor
FROM livros
INNER JOIN autores ON livros.id_auxiliar = auxiliar.id_autor
WHERE autores.autor = autor AND livros.id_auxiliar = auxiliar.id_livro
ORDER BY livros.titulo ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

marcelo tente assim:

 

SELECT a.autor, l.titulo
FROM auxiliar aux, autores a, livros l
WHERE
   aux.id_livro = l.id and
   aux.id_autor = a.id and
   aux.livro    = X

ORDER by l.titulo ASC	

Compartilhar este post


Link para o post
Compartilhar em outros sites

Justamente pra varios autores, não funcionou ?

 

A consulta mostrou o mesmo livro duas vezes, uma para cada autor.

 

Autor1 livro1

Autor2 livro1

 

Não é possível unir os dois resultados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Recebi a sugestão de usar a funcção GROUP_CONCAT, usando a seguinte expressão:

 

SELECT l.titulo, GROUP_CONCAT(a.autor SEPARATOR ", ") AS Autores,
FROM livros l
INNER JOIN aux ax ON ax.livros_id = l.id
INNER JOIN autores a ON ax.autores_id = a.id
GROUP BY l.titulo

 

Não deu certo, mas acredito que a saída seja por aí

 

Agora deu certo!

 

SELECT livros.titulo, GROUP_CONCAT(autores.autor SEPARATOR ',') AS Autores
FROM livros INNER JOIN aux ON aux.livros_id = livros.id INNER JOIN autores ON aux.autores_id = autores.id
GROUP BY livros.titulo

 

Moderador, pode fechar o tópico

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.