0

Existe uma cláusula mysql para duplicar um registro

criado por Thiago Alves Goulart em 03/03/2003 9:15am
Nenhuma descrição foi enviada.

Lista de Respostas:

0
04/03/2003 10:54am
(~21 anos atrás)
Luciano Lima respondeu:
Caro Thiago,

Realmente esta é um pegunta bem diferente, e realmente tem um problema se a table tiver chave primaria como disse o Edilmar.

Mas há uma maneira de fazer isso, inclusive se a tabela tiver chave primaria, eu vou te passar um exemplo abaixo, tendo em vista uma chave primaria automumeração.
Segue abaixo o exemplo:

Estrura da tabela de exemplo:
TABELA TESTE
id
nome
email

SQL A Ser utilizado:
$sql = "Insert into (nome, email) Select nome, email where id='$id_a_ser_duplicado' ";

mysql_query($sql);


[]s Luciano.



0
05/03/2003 8:17am
(~21 anos atrás)
Cléver Anjos respondeu:
A resposta anterior do Luciano não pode ser aplicada porque viola as regras da ANSI que proibe a seleção e inserção simultânea
Retirado do http://www.mysql.com/doc/en/INSERT_SELECT.html

INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE
tblTemp1.fldOrder_ID > 100;

The following conditions hold for an INSERT ... SELECT statement:

* The target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query because it's forbidden in ANSI SQL to SELECT from the same table into which you are inserting. (The problem is that the SELECT possibly would find records that were inserted earlier during the same run. When using subquery clauses, the situation could easily be very confusing!)
* AUTO_INCREMENT columns work as usual.
* You can use the C API function mysql_info() to get information about the query. See section 6.4.3 INSERT Syntax.
* To ensure that the update log/binary log can be used to re-create the original tables, MySQL will not allow concurrent inserts during INSERT ... SELECT.

A melhor maneira é carregar os valores para um vetor e reincluir novamente no banco de dados (cuidado com as chaves primárias)

0
05/03/2003 8:17am
(~21 anos atrás)
Cléver Anjos respondeu:
A resposta anterior do Luciano não pode ser aplicada porque viola as regras da ANSI que proibe a seleção e inserção simultânea
Retirado do http://www.mysql.com/doc/en/INSERT_SELECT.html

INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE
tblTemp1.fldOrder_ID > 100;

The following conditions hold for an INSERT ... SELECT statement:

* The target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query because it's forbidden in ANSI SQL to SELECT from the same table into which you are inserting. (The problem is that the SELECT possibly would find records that were inserted earlier during the same run. When using subquery clauses, the situation could easily be very confusing!)
* AUTO_INCREMENT columns work as usual.
* You can use the C API function mysql_info() to get information about the query. See section 6.4.3 INSERT Syntax.
* To ensure that the update log/binary log can be used to re-create the original tables, MySQL will not allow concurrent inserts during INSERT ... SELECT.

A melhor maneira é carregar os valores para um vetor e reincluir novamente no banco de dados (cuidado com as chaves primárias)

0
05/03/2003 12:13pm
(~21 anos atrás)
É pessoal a melhor maneira que encontrei e selecionando e inserindo porteriormente...

Não vi outra solução...

0
07/03/2003 8:42am
(~21 anos atrás)
Diego Silva Martins respondeu:
Ae Thiago,

Eu tive o mesmo problema, porém encontrei uma solução não muito dificil que foi realizar uma consulta ao banco de dados segue exemplo
<?

//Conecto ao servidor

$host = "localhost" //host
$user = "root" //Usuario
$pass = "" //Password
$db = "teste" //Banco de dados

mysql_connect($host,$user,$pass) or die ("Impossivel Conectar ao Servidor MySQL");
mysql_select_db($db) or die ("Impossivel Abrir Database");

$verifica = mysql_query("SELECT * from usuarios");

// então eu gero o seguinte:

if ($linha = mysql_fetch_array($verifica)) {
do {
if ($email == $linha["email"]) {
echo "Repetido";
}
else {
echo "Cadastro Liberado";
}
}
while($linha = mysql_fetch_array($verifica));
}
else {
//CAso seja a primeiro registro isso força ele a não entra no if
echo "Cadastro Liberado
}

?>
Tipo no MySql não descobrir nenhum metodo porém usando este pequeno algoritmo eu pude evitar a duplicação do E-mail. Espero que ajude no que vc está querendo.

[]'s
Diego

0
07/03/2003 4:08pm
(~21 anos atrás)
Olha amigo, o jeito mais fácil de fazer isso é inserindo novamente... soh tem q tomar cuidado em questão chave primária.... nao ocasionará erro.... ele soh não serah executado por existir uma regra no sgdb que proibe a duplicacao da mesma chave primaria.

Mas não deixa de ser uma pergunta interessante.
[]s

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)