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






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts