antiblock
Elveron
  • Chatbox

    You don't have permission to chat.
    Load More
Sign in to follow this  
Unk3n0w7

[Minicurso] Mysql En Quest

3 posts in this topic

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 : 

Imagem colocada


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.."')")

Imagem colocada

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.."'")
Imagem colocada

Creditos do Tutorial: ElRaulX, Metin2Zone
 

Share this post


Link to post
Share on other sites
antiblock
Rodnia | Alpha & Omega

Creditos do Tutorial: ElRaulX, Metin2Zone Add ai :)

Share this post


Link to post
Share on other sites

Meu MySQL 5.6...  é a mesma do 5.5 para utilizar o sistema ?? 

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this