Ir ao conteúdo

Erro ao inserir mais de um dado no mesmo ID


xineis

Posts recomendados

Postado

Olá colegas do fórum!

Eu estou ajudando um amigo com banco de dados e deparamos com um problema no MySQL.

Os dados estão dispostos em categorias diferentes com vários IDs. Por exemplo:

Categoria Mensagem

idMensagem int(11)

idTipo int(11)

idCategoria int(11)

idPreletor int(11)

temaGeral varchar(255)

titulo varchar(255)

Nessa categoria mensagem, eu preciso inserir 2 preletores que falaram a mensagem. Cada preletor é classificado em um número. Por exemplo:

idPreletor nome

1 pedro

2 joão

3 josé

Então, eu preciso colocar mais de um número no idPreletor da Categoria Mensagem.

Mas sempre que nós tentamos inserir os 2 preletores, o MySQL acusa o erro "Warning: #1265 Data truncated for column 'idPreletor' at row 1".

Nós tentamos separar os números por vírgulas, ponto-e-vírgula, aspas (simples e dupla), barra; mesmo assim, nada disso funcionou.

O que eu devo fazer? Acho que o título não ficou muito claro, se tiver alguma dúvida,

Desde já, agradeço pela ajuda!

  • Moderador
Postado
Olá colegas do fórum!

Eu estou ajudando um amigo com banco de dados e deparamos com um problema no MySQL.

Os dados estão dispostos em categorias diferentes com vários IDs. Por exemplo:

Categoria Mensagem

idMensagem int(11)

idTipo int(11)

idCategoria int(11)

idPreletor int(11)

temaGeral varchar(255)

titulo varchar(255)

Nessa categoria mensagem, eu preciso inserir 2 preletores que falaram a mensagem. Cada preletor é classificado em um número. Por exemplo:

idPreletor nome

1 pedro

2 joão

3 josé

Então, eu preciso colocar mais de um número no idPreletor da Categoria Mensagem.

Mas sempre que nós tentamos inserir os 2 preletores, o MySQL acusa o erro "Warning: #1265 Data truncated for column 'idPreletor' at row 1".

Nós tentamos separar os números por vírgulas, ponto-e-vírgula, aspas (simples e dupla), barra; mesmo assim, nada disso funcionou.

O que eu devo fazer? Acho que o título não ficou muito claro, se tiver alguma dúvida,

Desde já, agradeço pela ajuda!

você de hipotese alguma pode inserir na mesma ID. para isso você tem q fazer uma outra tabela armazenando em cada linha o ID do idPreletor e o ID da mensagem.

assim você pode ter:

id idPreletor id_mensagem

1 1 1

2 2 1

deu pra entender?

você terá uma tabela especificamente so para armazenar o ID do preletor e a ID da mensagem.

claro q ai.. você terá q fazer o relacionamento entre as tabelas e usar um INNER JOIN para consultar uma tabela relacionada

Postado

Certo, obrigado pela ajuda!

Eu sou bem novato com isso, mas pelo que entendi, eu terei que criar uma ID preletor 2?

Mais alguém? Eu creio que a minha dúvida foi respondida.

Obrigado mesmo dif!

Postado

Xineis,

Isso que o dif disse serve SEMPRE quando você tiver relacionamentos do tipo N - N.

No caso a sua tabela está feita do modo de receber 1 mensagem para 1 preleitor, e o que você quer fazer é... deixar N mensagens para N preleitores.

Sempre que isto acontecer crie uma tabela auxiliar, no caso um exemplo, preleitorXmensagem.

com os campos de idMensagem e idPreleitor.

Neste caso, você faz uma amarração com as outras duas tabelas.

Use este método de tabela auxiliar sempre que tiver relacionamentos de N - N.

Espero ter ajudado.

  • Moderador
Postado
Xineis,

Isso que o dif disse serve SEMPRE quando você tiver relacionamentos do tipo N - N.

No caso a sua tabela está feita do modo de receber 1 mensagem para 1 preleitor, e o que você quer fazer é... deixar N mensagens para N preleitores.

Sempre que isto acontecer crie uma tabela auxiliar, no caso um exemplo, preleitorXmensagem.

com os campos de idMensagem e idPreleitor.

Neste caso, você faz uma amarração com as outras duas tabelas.

Use este método de tabela auxiliar sempre que tiver relacionamentos de N - N.

Espero ter ajudado.

exato, esqueci de mencionar.. que é um relacionamento N:N.

se usar o workbench você tem um icone com N:M. para criar é só usar esse icone na tabela preleitor com a tabela mensagem que ai ele cria direto.

eu uso bastante o oracle workbench para modelagem do banco. e depois uso a ferramenta forward enginer do workbench para "upar" o modelo para o servidor mysql.

porque usar o workbench? porque se você tiver que mudar alguma coisa.. você moda no modelo que nao surtirá efeito no banco fisico. então você salva e depois ao invés de re-enviar.. você da um synchronize e atualiza o banco.

Postado

Quando vocês falam "N mensagens para N preletores", está incluído 1 mensagem para 2 (ou até mais) preletores, certo?

Aí é só criar essa tabela auxiliar. E como eu relaciono a tabela auxiliar, com a principal?

Muito obrigado pela ajuda!

Postado

Isso mesmo Xineis,

Funciona tanto 1:1 quanto 1:N, N:1 e N:N.

No caso você precisa saber, qual vai ser o jeito mais utilizado.

Como você disse que precisa colocar mais de um preleitor na mensagem, e possivelmente um leitor pode ter várias mensagens, você tem um relacionamento de várias mensagens com vários preleitores.

O que você deve fazer é sempre ver qual é a quantidade máxima de relacionamento, no caso, N:N.

No caso do relacionamento você faz o seguinte.

Crie uma tabela chamada preleitor_mensagem

Essa tabela terá 2 campos: idPreleitor, idMensagem.

Ambas serão chave estrangeira das tabelas preleitor e mensagem respectivamente, no caso você só se preocupe com isso caso seja em Oracle ou Postgres o seu banco, se for MySql, não há problemas.

Bom, tabela criada com os campos. E agora?

Você fará o seguinte.

Toda vez que você criar uma mensagem nova, você vai dar um insert na tabela de mensagens, e um na tabela de preleitor_mensagem, juntamente com os id's dos preleitores. No caso, um insert para cada preleitor.

Exemplo:

Mensagem : 100

Preleitores : 10, 11, 12

insert into mensagem values(100,...);

insert into mensagem_preleitor values(100,10);

insert into mensagem_preleitor values(100,11);

insert into mensagem_preleitor values(100,12);

Por que fazer isto?

Você irá colocar em uma tabela várias linhas, cada linha com uma mensagem e um preleitor, pois assim você consegue deixar o banco mais organizado.

Mas e se eu quiser fazer um select dos dados?

Simples, faça um join com as 3 tabelas.

Faça um select com a tabela de preleitor, com um join com a tabela de mensagem_preleitor e outro join com a tabela de mensagens. Ou se achar muito difícil, pode fazer no where mesmo.

Exemplo:

Select m.*,p.* from mensagem m, preleitor p, mensagem_preleitor mp

where m.idmensagem = mp.idmensagem

and p.idpreleitor = mp.idpreleitor;

Pronto, neste caso você terá todas as mensagens com seus respectivos preleitores.

Espero ter ajudado.

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...