Ir para conteúdo

POWERED BY:

Arquivado

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

geraldojp

While

Recommended Posts

Sou novo com banco de dados MySQL. Mesmo lendo em vários sites, não consigo criar um while para inserir vários registros em uma tabela.

Peço ajuda!!

Segue o código:

 

delimiter //
begin
set @counter = (select min(id) from tabela_pergunta where category = 18);
set @fim = (select max(id) from tabela_pergunta where category = 18);
while @counter <= @fim do
insert into tabela_resposta(question,answer,fraction,feedback)
select distinct @counter,answer,1,''
from tabela_resposta
where question = 5;
set @counter = @counter+1;
end while;
end //

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho um grupo de perguntas cujas as respostas são sempre as mesmas.

Ex:

Pergunta1?

() a

() b

() c

Pergunta2?

() a

() b

() c

Daí gostaria de replicar as respostas para meu grupo de pergunta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ver, dentro do while tem um INSERT INTO ... SELECT ..., se você fizer somente o SELECT, algum resultado é exibido?

 

Minha dúvida é porque você está fazendo um INSERT na mesma tabela do SELECT, pode ser que o problema esteja aí...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que ter os dois...deixa eu tentar explicar melhor..

A tabela de resposta é da seguinte forma:

id int

idpergunta int

resposta varchar

 

Para cada pergunta, vou ter um conjunto de respostas quem sempre serão as mesmas.

Pegando o exemplo anterior, se eu faço um select das respostas para a pergunta 1, vou ter como resultado: () a, () b, () c. E é esse resultado que quero replicar para o conjunto de perguntas. E é por isso que tenho que ter um select dentro do insert, para pegar o conjunto de respostas.

Sendo que o contador que eu uso, vai é o id das perguntas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ver, dentro do while tem um INSERT INTO ... SELECT ..., se você fizer somente o SELECT, algum resultado é exibido?

 

 

Ainda não entendi, substitui o @counter do SELECT e executa, me diz qual foi o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo apenas o select da tabela de resposta usando um idpergunta já existente. O resultado foi: () a, () b, () c.

select * from tabela_resposta where idpergunta = 5;
Agora quero replicar essas mesmas respostas, na tabela de resposta, porem com o idpergunta diferente.
Lembrando que minha tabela resposta é composta por id, idpergunta, resposta.
Supondo que eu tenha 10 perguntas, terei que inserir na tabela_resposta essas 10 perguntas e cada pergunta vai ter 3 repostas. Usando algoritmo, ficaria da seguinte forma:
i = 1; faça enquanto i <= 10: insere tabela_resposta id_pergunta(neste caso é o próprio contador i ) e as respostas (onde tenho que fazer o select usado acima, já que são três respostas).
Uma outra forma é usar três insert para cada resposta com o mesmo id_pergunta, que também me traria o mesmo resultado.
De qualquer forma, como você usaria a estrutura while para o problema acima relatado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, pelo visto você quer fazer uma TRIGGER ou PROCEDURE, ainda não conheço nenhuma...

 

Mas eu faria um relacionamento, verificaria qual pergunta está sem resposta por meio de um LEFT JOIN, e realizaria um INSERT onde o LEFT JOIN retornasse NULL...

 

Por exemplo:

SELECT t1.id, t2.id
FROM primeira_tabela t1
LEFT JOIN segunda_tabela t2 ON t1.id = t2.id
WHERE t2.id IS NULL

Esta consulta retorna somente os ids da primeira_tabela onde não existe o id na segunda tabela, mas vou estudar mais o assunto...

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.