insert into no meio da tabela [RESOLVIDO]

1. insert into no meio da tabela [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 24/09/2013 - 15:21h

Olá pessoal, procurei na internet mas nao encontrei uma informaçao a respeito do insert no meio da tabela. Vou explicar o caso.
No aplicativo é uma tabela de uma materia de alunos da escola, os alunos tem que estar na ordem, e nao pode mudar os numeros, uso o id com autoincrement para controlar os numeros.

vou dar um exemplo:
tabela_de_alunos
id- 1 nome- aluno1
id- 2 nome- aluno2
e assim por diante

tabela_1_materia
id - 1 chamadas .....
id - 2 chamadas.....
e assim por diante

tabela_1_notas
id - 1 notas ....
id - 2 notas ....
e assim por diante
entao as outras materias seguem o mesmo padrao, todas usando o id como referencia do numero do aluno, o que acontece é que com o diario em funcionamento, com notas e chamadas ja lançadas eu preciso acrescentar um aluno no meio da tabela sem perder a referencia dos outros.

supondo que esse aluno va ser o novo numero 10, do 10 pra frente todos irao mudar de numeros, o 10 vira 11, o 11 vira 12 e assim por diante, tem uma maneira de dar um insert direto tipo
insert into tabela_de_alunos (id) (9) position after 10 acho que algo do tipo e assim o autoincrement alterar os outros numeros?


  


2. insert into no meio da tabela

CASSIO FERRAZ
cassio88

(usa Ubuntu)

Enviado em 24/09/2013 - 15:58h

creio que você já visitou a página mysql a respeito, que é
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

em todo o caso, achei sua regra de negócio um pouco diferente, quando eu mexia com educação, eu tinha a tabela alunos (campos id, nome, ...) e ordenava pela coluna nome.
Eu tinha também a tabela matéria (id, descrição)
e por fim uma outra tabela para você associar o id do aluno ao id da matéria (lógico que há mais de um modo de você fazer a modelagem, para você não perder a referência temporal, isto é, o ano/semestre)

agora, o que me causou apreensão é que, se você mudar o id do aluno 16 para 17, isto precisa se refletir nas demais tabelas

espero ter colaborado de alguma forma.


3. Re: insert into no meio da tabela [RESOLVIDO]

Josenildo Cardoso
dungamaster

(usa Debian)

Enviado em 25/09/2013 - 09:07h

Não sei se te ajuda, mais usando o mysql, se você estiver dentro da tabela e clicar em operações, la voce pode definir o valor atual do autoincrement(agora não sei se esse valor é o proximo ou o ultimo que foi usado, se analisar direito você descobre), entao vc pode tentar ou da um insert direto na tabela definindo o id como 10, ou alterar o autoincrement da tabela para cair no 10 na proxima inserção, se caso inserir direto e o autoincrement mudar, é só ir la nessa opção e alterar o numero.


4. Re: insert into no meio da tabela [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 26/09/2013 - 23:04h

cassio88 escreveu:

creio que você já visitou a página mysql a respeito, que é
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

em todo o caso, achei sua regra de negócio um pouco diferente, quando eu mexia com educação, eu tinha a tabela alunos (campos id, nome, ...) e ordenava pela coluna nome.
Eu tinha também a tabela matéria (id, descrição)
e por fim uma outra tabela para você associar o id do aluno ao id da matéria (lógico que há mais de um modo de você fazer a modelagem, para você não perder a referência temporal, isto é, o ano/semestre)

agora, o que me causou apreensão é que, se você mudar o id do aluno 16 para 17, isto precisa se refletir nas demais tabelas

espero ter colaborado de alguma forma.


A ordem dos alunos e lida pela ordem da tabela, nao importa o id:
se tiver
1 - aluno 1
2 - aluno 2
3 - aluno 3

supondo que insira um novo aluno 2 acima ele ficaria na 4 posicao apesar de ter o 2 no id

nao se reflete nas outras tabelas pq elas nao se relacionam entre si atraves do banco de dados, os relacionamentos eu fiz atraves do aplicativo, usando varias consultas separadas ;)

eu consegui resolver o problema com 9 passos vou postar abaixo a resolucao:


5. Re: insert into no meio da tabela [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 26/09/2013 - 23:05h

dungamaster escreveu:

Não sei se te ajuda, mais usando o mysql, se você estiver dentro da tabela e clicar em operações, la voce pode definir o valor atual do autoincrement(agora não sei se esse valor é o proximo ou o ultimo que foi usado, se analisar direito você descobre), entao vc pode tentar ou da um insert direto na tabela definindo o id como 10, ou alterar o autoincrement da tabela para cair no 10 na proxima inserção, se caso inserir direto e o autoincrement mudar, é só ir la nessa opção e alterar o numero.


sim, o problema e que meu aplicativo nao le pelo id em ordem, le pela ordem da leitura do sql..


6. Re: insert into no meio da tabela [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 26/09/2013 - 23:23h

A resolucao do problema:

Primeiro usei o seguinte:

vamos supor que tem 10 alunos cadastrados e vou inserir um no meio na 4 posicao:

1 - "UPDATE TABLE turmamateria set id = id + 1 where id>=4 ORDER BY id DESC" // aumentei 1 no id de cada aluno de 4 e acima

2 - "INSERT INTO turmamateria (id, nome, .... outros campos) VALUES(4, nome, ... outros campos)"
// acrescentei um novo na posicao 4

3 - "CREATE TABLE turmamateriabak SELECT * FROM turmamateria"
// fiz um clone da tabela para reordenar os alunos na ordem certa obs: nao adianta colocar ORDER BY id ASC porque ele grava na ordem que esta na outra tabela

4 - "TRUNCATE TABLE turmamateriabak"
// limpei a tabela bak

5 - "INSERT INTO turmamateriabak (id, nome, ... outros campos) SELECT (id, nome, outroscampos) FROM turmamateria ORDER BY id ASC"

// ate aqui tudo bem, porem nesse momento tem um registro zero inserido

6 - "DELETE FROM turmamateriabak WHERE id=0"

// porem a tabela nao esta autoincrement pois isso nao e definido quando cria ela usando o select

7 - "ALTER TABLE `turmamateriabak` ADD INDEX ( `id` )"

8 - "ALTER TABLE `turmamateriabak` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT"

e por ultimo

9 - "DROP TABLE turmamateria"

10 - "RENAME TABLE turmamateriabak TO turmamateria"

bom foi isso que eu fiz, gastou muita coisa 10 passos