Legitimo Posted July 12, 2021 Share Posted July 12, 2021 (edited) Olá atualmente estou estudando mysql, sqlite, contudo estou com dificuldade de aprender algumas coisas. Por exemplo eu tenho uma tabela chamada: 'inventario' Nessa tabela chamada 'inventario' tenho 3 colunas: id, playerid e items id = AUTO_INCREMENT playerid = Armazenamento ID Player items= Armazenamento Items, Facção, Slot Na coluna 'items' da tabela 'inventario' tenho esse formato: [ { "maconha": [ 1, 1 ], "cocaina": [ 5, 2 ], "factionid": 1, "anfetamina": [ 3, 3 ], "crack": [ 1, 4 ], "heroina": [ 25, 5 ], "alcool": [ 0, 0 ] } ] Eu uso a forma padrao e bem simples de alterar algum valor de determinada coluna, por exemplo: local database = -- Conexão com o banco de dados local playerID = -- ElementData local New = 2 dbExec(database, "UPDATE inventario SET items = ? WHERE playerid = ?", New, playerID) Nessa função de exemplo eu seleciono a tabela inventario e procuro por items, altero a coluna de numero (playerID) e altero colocando nessa coluna (New) Eu tentei fazer de algumas formas usando: local inventario = fromJSON(items) local inventario = toJSON({toJSON({items})}) -- Exemplo da forma que atualiza no banco de dados.... -- >> [ [ "[ { \"1\": \"1\", \"2\": \"1\", \"maconha\": \"maconha\" } ]" ] ] -- >> [ [ "[ [ { \"maconha\": \"1\" }, { \"maconha\": \"1\" }, { \"maconha\": \"2\" } ] ]" ] ] Mais todos atualiza bugado no banco de dados, estou quebrando a cabeça pra conseguir alterar somente uma variavel expecifica dentro da estrutura da coluna. Por exemplo, alterando de: "maconha": [ 1, 1 ] para: "maconha": [ 1, 2 ] Quero aprender somente aprender alterar os valores dessas 'variaveis' Alguem pode me ajudar, muito obrigado, espero ter seguido as regras da publicação. Edited July 12, 2021 by legitimo Link to comment
Other Languages Moderators androksi Posted July 13, 2021 Other Languages Moderators Share Posted July 13, 2021 Olá! Seja bem-vindo(a) ao fórum. Primeiramente, partindo do princípio de que banco de dados foi feito para salvar dados únicos, e não um objeto, como JSON. Da forma que você está tentando fazer, fica um pouco mais complicado. Pois, você iria precisar: Criar uma função, cuja recebe o objeto JSON do db; Converter para um formato que o MTA entenda, usando fromJSON; Inserir o resultado do fromJSON em uma tabela, com seus respectivos índice e valor. Uma vez com a tabela contendo os índices e valores, você iria alterar o valor de alguma delas e converter novamente para JSON, usando toJSON. Daí você estaria pronto para salvar novamente os itens do jogador no banco de dados. Exemplo: local playerItems = [[ [ { "maconha": [ 1, 1 ], "cocaina": [ 5, 2 ], "factionid": 1, "anfetamina": [ 3, 3 ], "crack": [ 1, 4 ], "heroina": [ 25, 5 ], "alcool": [ 0, 0 ] } ] ]] -- Pegando como exemplo o seu, da forma que retornaria do banco de dados function convertJSONToTable(object) -- Função para converter JSON em uma tabela no qual poderemos modificar local JSON = fromJSON(object) local data = {} for index, value in pairs(JSON) do data[index] = value end return data end local myItems = convertJSONToTable(playerItems) -- Modificando o valor myItems["crack"][1] = 2 -- [edita_este_valor, 4] myItems["crack"][2] = 6 -- [1, edita_este_valor] local modifiedItems = toJSON(myItems) -- Salve o "modifiedItems" no banco de dados 1 Link to comment
Legitimo Posted July 13, 2021 Author Share Posted July 13, 2021 5 hours ago, androksi said: Olá! Seja bem-vindo(a) ao fórum. Primeiramente, partindo do princípio de que banco de dados foi feito para salvar dados únicos, e não um objeto, como JSON. Da forma que você está tentando fazer, fica um pouco mais complicado. Pois, você iria precisar: Criar uma função, cuja recebe o objeto JSON do db; Converter para um formato que o MTA entenda, usando fromJSON; Inserir o resultado do fromJSON em uma tabela, com seus respectivos índice e valor. Uma vez com a tabela contendo os índices e valores, você iria alterar o valor de alguma delas e converter novamente para JSON, usando toJSON. Daí você estaria pronto para salvar novamente os itens do jogador no banco de dados. Exemplo: ]] -- Pegando como exemplo o seu, da forma que retornaria do banco de dados function convertJSONToTable(object) -- Função para converter JSON em uma tabela no qual poderemos modificar local JSON = fromJSON(object) local data = {} for index, value in pairs(JSON) do data[index] = value end return data end -- Modificando o valor myItems["crack"][1] = 2 -- [edita_este_valor, 4] myItems["crack"][2] = 6 -- [1, edita_este_valor] local modifiedItems = toJSON(myItems) -- Salve o "modifiedItems" no banco de dados Boa tarde meu amigo muito obrigado pela sua explicacao ampla e clara, juro que entendi oque voce me explicou, vou estudar e botar em pratica, primeiro vou estudar sobre fromJSON e toJSON e semelhar sua explicacao pra ter o entendimento de como entender a linguagem de programacao passada pela wiki ou demais livrarias, que um pouco confusa, praticando e semelhando consigo entender mais rapido. Link to comment
Legitimo Posted July 13, 2021 Author Share Posted July 13, 2021 Olá, boa noite amigo passei a tarde com a familia fui botar em pratica oque você me ensinou e consegui desenvolver oque eu estava querendo desenvolver. Venho novamente agradecer, tambem venho agradecer pela função: function convertJSONToTable() e pelo mini exemplo explicativo como eu deveria usar, funcionou tudo ok Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now