Ir para conteúdo
  • 0

[duvida] MYSQL como remover storages que contenham um dado em uma tabela


drakylucas

Pergunta

tipo, eu criei um script onde seto a alguns players uma tabela contendo 2 campos na storage de um player

 

exemplo:


setPlayerStorageValue(cid,15455,{xx = 31, yy = 12})


 

gostaria de um comando que deletasse todas as linhas do banco de dados onde na storage 15455, no campo xx, tivesse com o numero 31, por exemplo, e quero utilizando o

 

db.executequery(query)

 

 

exemplo:

 

db.executeQuery("Delete * from player_storages where key[xx] == 31")  

 

 

(claro q o exemplo acima nao funcionou, mas é isso q eu quero)

 

obrigado

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Rapaz, nunca vi algo desse tipo, mas acho que dá pra fazer usando a tabela como uma string:

 

local result = db.getResult("SELECT `value` FROM `player_storage` WHERE `key` = 15455")

if result:getID() == -1 then
   return true
end

while true do
   local value = result:getDataString("value")
   if string.match(value, "{xx = (.-),") == "31" then
       local a = "{xx = "..string.match(value, "{xx = (.-),")..", yy = "..string.match(value, "yy = (.-)}").."}"
       db.executeQuery("DELETE FROM `player_storage` WHERE `value` = '"..a.."';")
   end
   if not result:next() then
       break
   end
end

 

Fiquei quase 1 hora tentando fazer isso, tomara que funcione .-.

 

OBS: Faz um backup da database antes de executar o script.

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

então, nao vai dar para eu testar agora (é q to montando um sistema meio complexo, e isso seria apenas para uma das functions dele)

 

mas pela logica, ao ler, funcionará kk

 

fiz a pergunta no yahoo answers, me disseram que da pra fazer utilizando SUBSTRING

exemplo:

DELETE FROM sua_tabela WHERE SUBSTRING(campo, 2,7) = 'xx = 31';

 

porem, no lugar do 7, eu teria que descobrir uma posição antecedente da virgula =x

nao manjo mt manipulação de string =/

 

 

você saberia me dizer o que posso usar para pegar a posição de um caractere?

 

veja o que estou fazendo +- (é um sistema de reinos, porem bem avançado, mais que o guild system kk)

 

 

	   function invitar(cid,name,reinoid,reinonivel)
		  if getReino(getPlayerGUID(cid)).reino <= 0 or getReino(getPlayerGUID(cid)).nivel < patenteMinima then	  
			 return doPlayerSendTextMessage(cid,22,"Voce precisa pertencer a uma alta patente de um reino para convidar pessoas")
		  end
		  if not isPlayer(getPlayerByNameWildcard(name)) then
			 return doPlayerSendTextMessage(cid,22,"ERRO: Jogador inexistente ou offline.")
		  end

		  if getInvitation(getPlayerByNameWildcard(name)) == false and getReino(getPlayerGUID(getPlayerByNameWildcard(name))).reino == 0 then
			 setPlayerStorageValue(getPlayerByNameWildcard(name), storages.invitation, {reino = reinoid, nivel = reinonivel})  
			 doPlayerSendTextMessage(getPlayerByNameWildcard(name),22,"O Reino " ..getNameReino(reinoid).." quer que voce se torne " .. patentes[reinonivel].nivel)
			 doPlayerSendTextMessage(getPlayerByNameWildcard(name),22,"Digite \"!reinos aceitar\" para entrar no reino, \"!reinos recusar\" para recusar o convite!")				
			 doPlayerSendTextMessage(cid,22,"Voce acabou de invitar o jogador "..name.." para o seu reino!")			
		  else
			 doPlayerSendTextMessage(cid,22,"O jogador "..name.." ja foi convidado para outro reino! Desculpe")
		  end
	   return true
	   end

 

	  function excluirReino(ID)
			   db.executeQuery("UPDATE `players` SET reino = 0, nivelreino = 0 where reino = ".. ID ..";")
			   db.executeQuery("DELETE from `reinos` where id =  ".. ID ..";")
			   -- arrumar db.executeQuery("UPDATE `player_storage` SET value = -1 where key = ".. ID ..";")
		  return true
	  end

 

basicamente estou utilizando uma storage para invitar a pessoa pro reino, e faze-la aceitar ou recusar.. qnd aceita, a storage dela é removida e ela é modificada no banco pro numero equivalente ao reino, porem se o jogador excluisse o reino eu gostaria que, alem de todas as pessoas que tivessem no reino saissem dela (q ja está feito), as pessoas que forem convidadas (que tem a storage) também fossem desconvidadas... por isso a duvida kkk

 

 

aaa, e tbm ja te dei um rep+, perdeu tempo trabalhando nisso kk

Editado por DrakyLucas
Link para o comentário
Compartilhar em outros sites

  • 0

o cara nem disse q a duvida foi sanada kkk se eh foda heim rok... ;/

 

então, nao vai dar para eu testar agora (é q to montando um sistema meio complexo, e isso seria apenas para uma das functions dele)
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...