Ir para conteúdo

POWERED BY:

Arquivado

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

andre_neves_123

problema ao usar INSERT ou UPDATE dentro da função IF()

Recommended Posts

estou querendo fazer o seguinte, criei uma condicional para verificar se existe um registro com um determinado valor dentro da tabela, se existir, quero usar a função UPDATE para apenas atualizar a tabela, ou caso não exista ele irá inserir o registro, tentei o seguinte código:

 

IF( 
( SELECT name
FROM user
WHERE id = 1/*apenas uma suposição*/
AND name =  'andre neves'
LIMIT 1),
/*condição verdadeira*/ UPDATE user SET algum_campo =  'algum_valor' WHERE id =1 AND name =  'andre neves' LIMIT 1 , 
/*condição falsa*/ INSERT INTO user VALUES ( /*id*/1, /*name*/'andre neves'/*...*/)
) 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode resolver utilizando um ON DUPLICATE KEY, exemplo:

mysql> create schema db;
Query OK, 1 row affected (0.02 sec)

mysql> use db ;
Database changed
mysql> create table users ( id integer not null auto_increment primary key, name varchar ( 30 ) ) ;
Query OK, 0 rows affected (0.13 sec)

mysql> insert into users ( id , name ) values ( 1 , 'Andrey' ) 
Query OK, 1 row affected (0.01 sec)

mysql> insert into users ( id , name ) values ( 2 , 'Roger' ) ;
Query OK, 1 row affected (0.00 sec)

mysql> select * from users;
+----+--------+
| id | name   |
+----+--------+
|  1 | Andrey |
|  2 | Roger  |
+----+--------+
2 rows in set (0.00 sec)

mysql> insert into users ( id , name ) values ( 1 , 'Andrey' ) on duplicate key update name = 'Andrey Knupp', id = 1 ;
Query OK, 2 rows affected (0.00 sec)

mysql> select * from users ;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | Andrey Knupp |
|  2 | Roger        |
+----+--------------+
2 rows in set (0.00 sec)

 

:seta: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum, obrigado pelo codigo, vou testar

 

@edit

 

não deu certo, quero minha tabela assim, quero não pode ter dois registros com o nome e id iguais, mais pode ter dois registros com o mesmo nome, mas com id diferente, exemplo:

 

+----+--------------+
| id | name         |
+----+--------------+
|  1 | andre neves  |
|  1 | Andrey       |
|  2 | andre neves  |
+----+--------------+ // quero que fique registrado assim

 

+----+--------------+
| id | name         |
+----+--------------+
|  1 | andre neves  |
|  1 | andre neves  |
|  2 | Andrey       |
+----+--------------+ // não quero este tipo de registro

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom vou entrar em mais detalhes

 

isso é para uma modificação para o jogo counter strike(plugin), quando começar uma partida do jogo, ele insere o registro em uma tabela, e insere tambem os dados dos players em outra tabela, no caso o campo id, seria o id da partida, por isso eu posso ter dois ou mais registros do mesmo player, mas com id diferente

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma pergunta, como cria uma função do mysql, talvez eu consiga uma forma melhor, e o auto_increment tambem nao serve, pois como tem varios jogadores em uma partida, entao vai ter varios registros com o mesmo id

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE FUNCTION .. cara eu estou perdidinho nessa sua dúvida .. no primeiro output esperado, você mostra que os ID's e nomes se repetem .. depois fala que quer apenas atualizar o registro ..

 

Entretanto, já que pode ter vários nomes, e ids, não precisa de índice nesses campos .. insere naturalmente na tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais voce poderia me mostrar alguns exemplos de uma função do mysql

 

...

 

veja um exemplo de o que eu quero dizer:

 

tabela 1: (registro das partidas no jogo)
+---------------+------+
| id_da_partida | ...  |
+---------------+------+
|       1       |      |
|       2       |      |
+---------------+------+

tabela 2: (registro dos jogadores)
+---------------+--------------+--------------------+
| id_da_partida |     nome     |        time        |
+---------------+--------------+--------------------+
|     1         | andre neves  | contra_terroristas |
|     1         | Andrey Knupp | terroristas        |
|     2         | andre neves  | contra_terroristas |
|     2         | Andrey Knupp | terroristas        |
+---------------+--------------+--------------------+

 

vou usar o update para atualizar o time do player e outros campos

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.