Edikosh998 Posted May 1, 2012 Share Posted May 1, 2012 (edited) Version 1.0 - Todavia le tengo que agregar imagenes, pero lo pongo para mostrar como va quedando. Tutorial SQL Como muchos saben , un archivo de calculo (Excel por ejemplo) se puede observar columnas y filas. Para el que no sabe diferenciarlo, las columnas son las que estan vertical (nombradas como A/B/C/D...) y las filas horizontal (1,2,3...). Una hoja de calculo la podemos denominar como una tabla para que se comprenda de que estamos hablando. El SQL es un LENGUAJE. Es decir, no tiene nada que ver con Lua, ya que se puede usar en muchos tipos de programas. El MTA incluyo el MySQL y SQLite como herramientas utiles para guardar datos del servidor. Tienen que entender que el SQL se maneja en base a consultas. Por ejemplo : Vos tenes dos columnas llamado A y B. En la columna "A", guardas nombres y en la columna "B" guardas Level. Con el SQL vos podes ordenar para que por ejemplo, si una personaje se registra, vos insertar una FILA con su nombre + el nivel inicial (Nivel 1). Hasta aca, seguramente se entiende. Igualmente, editare este tutorial poniendo graficos e imagenes para que sea mucho mas entendible. Las funciones principales del SQL son : Insertar, Borrar, Crear, Seleccionar, Actualizar. En tu server, te vas a dar cuenta que eso basta y sobra para lo que necesitas. A continuacion, pasaremos a ver la sintaxis del SQL : Crear : Capaz lo que todos quieren al principio. Poder crear una tabla de SQL...Para crearla, necesitas darle un nombre a la tabla que deseas agregar + las columnas que quieren poner. Pero eso no es todo, a cada columna le tenes que asignar su clasificacion. Seguro ahi no entendiste, entonces para ser mas claro lo explico. Las columnas van a guardar datos. Pero necesitas especificar que TIPO DE DATOS (si va a hacer numeros, letras, cadena de texto, etc...). Los mas comunes son NUMBER y STRING en el SQLite (Que son los que le recomiendo que usen al principio). CREATE TABLE IF NOT EXISTS 'nombreDeTabla' (columnaUno 'Clasificacion', columnaDos 'Clasificacion') Insertar : Para poder Insertar datos, el SQL necesita saber a que tabla se lo vas a hacer. Despues, al insertar un dato, supones que vas a agregar UNA FILA, porque las columnas son permanentes (lo digo porque es un error muy comun, al principio). Si queres cambiar columnas, lo tendras que hacer manualmente desde un programa que lea Base de datos (como el SQLiteBrowser). INSERT INTO 'tabla' ('columnaUno','columnaDos'....) VALUES ('ValorUno','ValorDos'....) IMPORTANTE : SIEMPRE ES NECESARIO AGREGAR DATOS A TODAS LAS COLUMNAS , ejemplo Si yo tengo columna A,B,C y quiero agregar solo a A y B, tenes que hacer : INSERT INTO 'tabla'('A','B','C') VALUES ('Hola','32','') Osea, le pones espacio y listo. Seleccionar : En mi opinion, es la funcion de SQL mas utilizada e importante de todas. Esta funcion te permite extraer datos de una tabla. Lo mejor de esta funcion, es que podes darle condiciones a esta seleccion. Por ejemplo, tengo una columna A que guarda nombre y otra B que guarda levels. Entonces despues quiero conocer todos los que son mas de level 2. Entonces en la condicion pedis que B sea mayor o igual a 2. SELECT 'columna' FROM 'tabla' WHERE 'columna' = 'Valor' Hay muchas formas de SELECT, podes pedir por cantidad, por orden , etc... Es importante saber, que si queres extraer datos de todas las columnas, necesitas usar el * . SELECT * FROM 'tabla' WHERE 'columna' = 'Valor' IMPORTANTE : No es necesario usar condicion, pero en el caso de los server vas a necesitas buscar datos especificos, como los datos de un personaje en particular por lo cual seguro haras : SELECT * FROM personajes WHERE Nombre = '"..getPlayerName(source).."' Eso de las '"..dato.."', es muy importante hacerlo bien porque sino, lo da invalido el SQL. En Insertar y actualizar deberas hacer lo mismo. Actualizar : Otra de las funciones importante es la de actualizar, que es muy util a la hora de guardar datos del PJ cuando esta deslogueando, como cuando sube de nivel , etc...En este tambien se encuentra la condicion, porque al actualizar, tenes que especificar Que fila vas a actualizar. Por ejemplo, si queres guardar los datos de un PJ, tenes que poner como condicion el nombre del personaje, asi sabe a donde guardarlo UPDATE 'tabla' SET 'columnaUno' = 'Valor','columnaDos' = 'ValorDos' WHERE columna = 'Valor' IMPORTANTE = Los 'tabla','columna' (el signo '') no hay que ponerlo, solo lo agrego como para indentificar. Borrar : Como bien dice el nombre, sirve para borrar un dato especifico de la tabla. Por supuesto, requiere de una condicion para saber que necesitas borrar de esa tabla. DELETE FROM 'tabla' WHERE 'columnaUno' = 'Valor' Para no olvidarme , para aplicar todo esto al MTA, necesitaran usar la funcion "executeSQLQuery"....Ejemplo quiero crear una tabla : executeSQLQuery("CREATE TABLE IF NOT EXISTS jugadores (Nombre STRING,Level NUMBER)") AVISO : ESTE TUTORIAL LO PODEMOS CONSIDERAR INCOMPLETO, PORQUE PARA ALGUNOS LE VA PARECER COMPLEJO. Actualizare este topic, agregando un EJEMPLO que servira para todos las funciones que nombre (haciendolo muchisimo mas facil la guia) Si quieren saber que cosas le pueden agregar a las condiciones, o quieren repasar las funciones SQL, les recomiendo : http://www.1keydata.com/sql/sql-commands.html PD : Diganme si hay algo mal, asi lo corrijo. Edited May 1, 2012 by Guest Link to comment
Alexs Posted May 1, 2012 Share Posted May 1, 2012 Buen Post, Reco + 10... mmm esto no es T!, bueno, Toma una Galleta Link to comment
Plate Posted May 1, 2012 Share Posted May 1, 2012 Esta muy bien explicado genial de 10 loco Link to comment
iFoReX Posted May 2, 2012 Share Posted May 2, 2012 Re bueno edikosh gracias a ti ya entendi SQl Muchas gracias EDIT: esto estaria bien ? addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), function() executeSQLQuery("CREATE TABLE IF NOT EXISTS Skins (Cuenta STRING,Level NUMBER)") end pero que otro eventos tendria que utilizar ? :3 Link to comment
Edikosh998 Posted May 2, 2012 Author Share Posted May 2, 2012 Esta perfecto lo que pusiste Mota. Cada vez que crees una tabla, usa el resourceStart... Despues, si por ejemplo queres que cuando loguea tipo se le inserte los datos haces : local consulta = executeSQLQuery("SELECT * FROM Skins WHERE Cuenta = '"..getPlayerName(source).."'") for index,value (consulta) do local Level = value["Level"] outputChatBox("Eres level : "..tostring(Level),source) setElementData(source,"su.level",Level) -- Usas elementData para no tener que extraer de SQL todo el tiempo Eso lo podes hacer desde el onPlayerLogin por ejemplo... Link to comment
Recommended Posts