Unk3n0w7 1,321 Posted September 26, 2013 Tenho visto que muitos de vocês perguntam como usar sql querys quest. Eu disse que iria fazer este mini tutorial, e aqui está ele. Primeiro de tudo para dizer que esse recurso não vem por padrão no metin e é por isso que alguns usuários fizeram a si mesmos, para a utilidade desse recurso é grande. Eu disse três pessoas que postaram esta função: Hanashi, mijago e yuko. Talvez mais foram publicados, mas só me lembro desses. Na minha opinião, o mais prático que eu vi até agora é a mais recente versão do mijago e é o que usamos neste Curso de curta duração.Primeiro de tudo, devemos declarar essas duas funções em nosso questlib.lua mysql_query = function(query) if not pre then local rt = io.open('CONFIG','r'):read('*all') pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') end math.randomseed(os.time()) local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{} os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51 -- os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55 for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'t')) end; os.remove(fi); for i = 2, table.getn(t) do table.foreach(t[i],function(a,b) out[i-1] = out[i-1] or {} out[i-1][a] = tonumber(b) or b or 'NULL' out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = tonumber(b) or b or 'NULL' end) end return outendfunction split(str, delim, maxNb) if str == nil then return str end if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return resultend ATENÇÃO! Se em nosso servidor que tenha instalado o MySQL versão 5.5 deve apagar esta : os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51 e remova o - a partir daqui: --os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55 A razão é simples, a sintaxe desta versão do MySQL é diferente. Agora temos que adicionar em quest_functions a função:mysql_query A função de divisão não é necessário adicioná-lo neste arquivo porque ele é usado internamente em um mysql_query. Bem, agora temos instalado função mysql. Agora, o mais importante: como ele é usado?Temos esta tabela : Como podemos ver, a tabela é chamado de 'tablatest "e está em" teste "a db. Esta tabela tem três campos, que são 'campo1', 'campo2' e 'campo3'.Com a chamada da função mysql_query, adicionar ou modificar os valores na tabela. Sintaxe mysql_query é o mesmo que qualquer outra consulta mysql você usar (para navicat, php ...). Mas você sabe a sintaxe eu aconselho você a procurar cursos de aprendizagem. A sintaxe é muito simples e não complicado, você só precisa olhar um pouco e dominaréis perfeitamente. Há milhares de cursos online e tutoriais mysql, você deve apenas olhar para eles. ATENÇÃO: Para usar declarações que retornam algum valor (select) deve atribuir a função a uma variável. Outros (atualizar, inserir ...) apenas tem que usá-lo como qualquer outra função. Bem, vamos começar. Começar a chamar toda a tabela.local read = mysql_query("SELECT * FROM test.tablatest") Esta variável é armazenado na tabela a seguir: local read = {[campo1] = {"texto1","texto2","texto3"},[campo2] = {"texto4","texto5","texto6"},[campo3] = {"texto7","texto8","texto9"}} Com isto em mente, e sabendo algumas tabelas e matrizes em lua está tudo resolvido. Queremos mostrar na tela 'texto5 ", que é armazenada em nossa mesa. Vamos chamar desta forma.local read = mysql_query("SELECT * FROM test.tablatest")say(read.campo2[2])--isto mostra texto5 Agora queremos chamar 'texto9': local read = mysql_query("SELECT * FROM test.tablatest")say(read.campo3[3])--isto mostra o texto9Agora queremos chamar 'texto1': local read = mysql_query("SELECT * FROM test.tablatest")say(read.campo1[1])--isto mostra o texto1 Aqui eu não vou conseguir explicar por que as matrizes não é que o curso, mas acho que olhando para os exemplos e você vai entender um pouco de reflexão. Agora também pode adicionar uma condição:local read = mysql_query("SELECT * FROM test.tablatest WHERE campo2 = 'texto5'") Esta variável é armazenado na tabela a seguir: local read = {[campo2] = {"texto4","texto5","texto6"}} E agora podemos chamá-lo da mesma forma que no exemplo anterior. Isso vai nos mostrar 'text6' na tela.local read = mysql_query("SELECT * FROM test.tablatest WHERE campo2 = 'texto5'")say(read.campo2[3])--esto muestra texto6 E para torná-lo realmente útil que chamamos de variáveis ou funções. local var = "texto5"local read = mysql_query("SELECT * FROM test.tablatest WHERE campo2 = '"..var.."'")say(read.campo2[3])--isto mostra texto6 Uma coisa importante a dizer é que esta função sempre cria as tabelas e, portanto, sempre chamá-lo da mesma forma, mesmo se você selecionar um único valor. local read = mysql_query("SELECT campo1 FROM test.tablatest WHERE campo1 = 'texto1'")say(read.campo1[1])--isto mostra o texto1 Acho que com estes exemplos e você pode ver como uma escolha (a verdade é que é muito difícil de explicar, uma vez que você não tem conhecimento de tabelas, mas pelo menos eu tentei XD). A melhor maneira de ver o seu uso é que você vai fazer testes em navicat e em seguida, movê-lo para uma missão. E agora a segunda parte. Se queremos adicionar novos valores que fazê-lo desta maneira:mysql_query("INSERT INTO test.tablatest VALUES ('texto10','texto11','texto12')") ou como fizemos antes: local v1 = "texto10"local v2 = "texto11"local v3 = "texto12"mysql_query("INSERT INTO test.tablatest VALUES ('"..v1.."','"..v2.."','"..v3.."')") E se alterar os valores: mysql_query("UPDATE test.tablatest SET campo1='prueba' WHERE campo1='texto10'") local x = "prova"local y = "texto10"mysql_query("UPDATE test.tablatest SET campo1='"..x.."' WHERE campo1='"..y.."'") Creditos do Tutorial: ElRaulX, Metin2Zone 3 мя.gαяяιχ, carlos9534 and Hue Br reacted to this Share this post Link to post Share on other sites
'PACI 2,317 Posted September 26, 2013 Creditos do Tutorial: ElRaulX, Metin2Zone Add ai :) Share this post Link to post Share on other sites
obetuno 431 Posted April 24, 2014 Meu MySQL 5.6... é a mesma do 5.5 para utilizar o sistema ?? Share this post Link to post Share on other sites