Jump to content


Photo

Delete Que Verifica Quantia De Registros Antes De Deletar


  • Faça o login para participar
3 replies to this topic

#1 DouglasDomi

DouglasDomi

    Novato no fórum

  • Usuários
  • 13 posts
  • Sexo:Não informado

Posted 22/02/2011, 16:14

Boa Tarde pessoal.

Preciso montar uma query DELETE que verifique a quantia de registros filtrados e se ela for maior ou igual ao valor X entao realiza o delete.

Eu fiz a quey abaixo porem não esta funcionando.

DELETE
FROM inventario
WHERE item_id = 3 AND personagem_id = 5
AND 2 <= (SELECT COUNT(item_id))
LIMIT 2

Na query acima eu tento fazer o COUNT pegar o numero de registros capturados pela filtragem ja feita no item_id e personagem_id..oq está errado?

Abaixo os campos da tabela e um exemplo de informação na tabela

Campos -> id, item_id, personagem_id
Registro -> 1 , 3, 5
Registro-> 2, 3, 5
Registro-> 3, 2, 6
Registro-> 4, 3, 7
Registro-> 5, 3, 5

Valeu!

Edição feita por: DouglasDomi, 22/02/2011, 16:19.


#2 Lusigmas

Lusigmas

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:São Paulo / SP

Posted 26/03/2011, 13:16

Olá Douglas.

Eu faria de uma maneira diferente, avisando de antemão que meus caminhos às vezes são meio tortuosos (mas funcionam, hehe):
- SELECT para verificar a quantia de registros filtrados,
- seguido de um if (se menor que x),
redirecione ou faça qualquer coisa,
else
- DELETE.

Abs.

#3 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 26/03/2011, 15:33

é.... com certeza dessa forma que o Lusigmas disse fica mais fácil...

Você pode utilizar até o código que você já fez... o where do select será o mesmo do delete...
Então você colocar o where em uma variável e depois aplica no select e no delete.


$where = "item_id = " . $item_id . " AND personagem_id = " . $personagem_id;

Aí você coloca esse count no select.

$select = "SELECT COUNT(item_id) WHERE " . $where;

Executa o select e verifica se o resultado é maior do que o que vc quer.
Se for você faz o delete senão... pode exibir uma mensagem de erro.


$delete = "DELETE FROM inventario WHERE " . $where ;


E pronto...!
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#4 DouglasDomi

DouglasDomi

    Novato no fórum

  • Usuários
  • 13 posts
  • Sexo:Não informado

Posted 29/03/2011, 12:06

hahaha...

valeu galera mais achei a solução para o problema...

fiz algo assim


DELETE FROM inventario WHERE 
(SELECT count(*) FROM (SELECT * FROM inventario WHERE meca_id = X) as c WHERE c.meca_id = X) >= Y LIMIT Y


Onde X é a pessoa no inventario e Y e a quantia a ser removida
Nao to com os codigos aqui agora para ter certeza ;D

So nao sei se eu precisaria fazer outro select....pra pegar o count bem como vcs falaram.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq