บันทึกข้อมูลตารางไอเทมลง MySQL ด้วย JSON
สอนการบันทึกข้อมูลแบบ ตาราง ด้วย JSON ลง MySQL
ผมจะสอน 2 ตัวทีสามารถบันทึกลง MySQL แบบง่ายๆ
วิธี 1 คือบันทึกลง MySQL ได้ทีละเยอะๆ
ข้อดี บันทึกข้อมูลได้ทีละเยอะๆโดยลูปทีเดี่ยว
ข้อเสีย จะต้องลูป เพื่อดึงมาใช้งานด้วยนั้นเอง
ปล อาจจะมีวิธีดึงข้อมูลด้วยวิธีอื่นๆ ก็เป็นได้
2 แบบการดึงข้อมูลมาใช้งานได้ ง่ายสุดๆ ง่ายกว่าข้อแรกเสียอีก
ข้อเสีย บันทึกได้น้อยเพราะต้อง ทำเป็นข้อความก่อนลง บันทึก
ข้อดี ดึงใช้งานได้ทันทีไม่ต้อง ลูป
แต่ข้อเสียก็แก้ไขได้ง่ายๆ แต่ต้องมาแก้ไขข้อความนั้นด้วยตัวเองและหากมีมากก็คงต้องเขียน ยาวเลย
เช่นแตกต่างจาก ข้อ 1 ทีแก้ไข แค่ตารางเฉยๆ นั้นเอง
1.1. ดึงตารางลงตัวฟังก์ชั้น toJSON()
local table = {
{ "exp"},
{ "level"},
{ "m4"},
{ "m4 mag"}
}
local value = toJSON( table )
แค่นี้ก็ ตัวแปร value ก็จะมีค่าเป็น text นำมาแสดงได้ โดยตัวอย่าง
chat: [ [ [ "exp"], [ "level"], [ "m4"] ,[ "m4 mag"] ] ]
และเมื่อต้องการดีงข้อมูลก็สามารถใช้ fromJSON( value ) พารามิเดอร์ จากทีถูก toJSON() นั้นเอง หรือเป็นข้อความทีทำขึ้นมาเองก็ได้ เช่น
local text = '[ [ [ "exp"], [ "level"], [ "m4"] ,[ "m4 mag"] ] ]'
1.2. การดึงข้อมูลลง ตารางไอเทม พร้อมค่าสถานะของมันก่อนลง MySQL
local table = {
{ "exp"},
{ "level"},
{ "m4"},
{ "m4 mag"}
}
local valueItem = {} -- ตารางเก็บข้อมูลทั้งหมด พร้อมค่าสถานะก่อนลงบันทึก
for i,v in ipairs( table ) do
-- ในลูปนี้ก็ต้องตรวจสอบว่า ตัวสถานะนั้นของเรามีค่าเป็น false ไหม ถ้าเป็นอย่างนั้นให้เป็น 0 แทน
local valueTable = getElementData( source, v[1]) or 0
table.insert( valueItem , { v[1] , valueTable })
end
หลักการมันก็คือ insert ข้อมูลทั้งหมดทีลูปได้ลง ตาราง valueItem โดยไม่ทับกัน พร้อมกับค่า สถานะนั้นลงไปด้วย
ตัวอย่างลูปข้อมูลทั้งหมด ของตัวตาราง valueItem
chat: [ [ [ "exp", 500], [ "level", 5], [ "m4", 1] ,[ "m4 mag", 30] ] ]
จากนี้ท่านก็สามารถบันทึกข้อมูลพวกนี้ลง MySQL ได้แล้ว
ตัวอย่างการบันทึก
dbExec( connection, "INSERT INTO `accounts` ( `table`) VALUES ( ?)" , toJSON( valueItem ) )
1.3. การดึงข้อมูลมาใช้งาน
ตัวอย่างดึงข้อมูลจาก MySQL
connection = dbConnect( "mysql", "dbname=mtasa;host=127.0.0.1", "root", "123" )
local qh = dbQuery( connection, "SELECT * FROM `accounts`" )
local rows = dbPoll( qh, -1 )
local value = rows[1]["table"] -- ดึงข้อมูลจาก MySQL
local valueTable = fromJSON( value ) -- นำมาใช้กับ ฟังก์ชั่น fromJSON ก่อนลูป
for i,v in ipairs( valueTable ) do
setElementData( source, v[1], v[2])
end
แบบการดึงข้อมูลมาใช้งานได้ ง่ายสุดๆ ง่ายกว่าข้อแรกเสียอีก ใช้งานดีกับการเก็บพิกัด
2.1. การร่วมรวมข้อมูลก่อนลงบันทึก
ข้อนี้ไม่ต้องมี ตาราง table = {} แบบนี้
แต่ต้องทำเป็นข้อความเสียก่อน
local x, y, z = getElementPosition( source )
local tJSON = '[ { "latest_x" : "' .. x .. '" , "latest_y" : "' .. y .. '", "latest_z" : "' .. z .. '" }]'
แค่นี้ก็บันทึกลง MySQL ได้เลย
dbExec( connection, "INSERT INTO `accounts` ( `positions`) VALUES ( ?)" , tJSON )
2.2 การดีงข้อมูลมาใช้งาน
ตัวอย่างดึงข้อมูลจาก MySQL
local qh = dbQuery( connection, "SELECT * FROM `accounts`" )
local rows = dbPoll( qh, -1 )
local value = rows[1]["positions"] -- ข้อมูลการ MySQL
local positions = fromJSON( value ) -- และนำมาใช้กับ ฟังก์ชั่น fromJSON ก่อนดึงข้อมูลก่อนใช้งาน
เริ่มดึงข้อมูลได้เลย
วิธีแรกต้องเรียกตัวแปร positions ตามด้วยตัว จุด และ ชื่อ ตารางทีบันทึกลงก่อนหน้านี้
local x = positions.latest_x
local y = positions.latest_y
local z = positions.latest_z
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
?
ตอบลบ