วิธีบันทึกข้อมูลลง MySQL โดย MTA:SA LUA
สิ่งที่จำเป็นสำหรับการเชื่อมต่อกับฐานข้อมูล MySQL
สามารถบันทึกข้อมูลเป็น String ด้วยประเภทข้อมูลที่มีอยู่หลากหลายประเภท โดยตัวอย่างของประเภทข้อมูลที่ใช้บันทึกเป็น String ได้แก่:
VARCHAR: ( แนะนำ ) เป็นประเภทข้อมูลที่ใช้บันทึกข้อความแบบความยืดหยุ่น (Variable-length string) ความยืดหยุ่นที่ว่าคือความยาวของข้อความสามารถเปลี่ยนแปลงได้ตามความต้องการของข้อมูล ตัวอย่างเช่น VARCHAR(255) ใช้บันทึกข้อความที่มีความยาวไม่เกิน 255 ตัวอักษร.
CHAR: เป็นประเภทข้อมูลที่ใช้บันทึกข้อความความยาวคงที่ (Fixed-length string) ซึ่งกำหนดความยาวของข้อความแน่นอน ตัวอย่างเช่น CHAR(50) ใช้บันทึกข้อความที่มีความยาวคงที่ 50 ตัวอักษร ไม่ว่าจะใส่ข้อมูลในช่องนั้นหรือไม่ก็ตามจำนวนตัวอักษรจะถูกใส่ครบ 50 ตัวอักษรเสมอ.
TEXT: เป็นประเภทข้อมูลที่ใช้บันทึกข้อความที่มีความยาวมากกว่า VARCHAR และ CHAR ซึ่งอาจบันทึกข้อความที่มีความยาวเกิน 65,535 ตัวอักษร คือมีความยืดหยุ่นสูงสุด.
ENUM: เป็นประเภทข้อมูลที่ใช้บันทึกข้อมูลจากชุดของค่าที่กำหนดไว้ล่วงหน้า ตัวอย่างเช่น ENUM('male', 'female') ใช้บันทึกเพศของบุคคลที่มีค่าเป็น "male" หรือ "female" เท่านั้น.
SET: เป็นประเภทข้อมูลที่ใช้บันทึกข้อมูลจากชุดของค่าที่กำหนดไว้ล่วงหน้า แต่ค่าใน SET สามารถเป็นหลายค่าได้ ตัวอย่างเช่น SET('reading', 'writing', 'speaking') ใช้บันทึกความสามารถในการอ่าน เขียน และพูดภาษาของบุคคล.
สามารถบันทึกข้อมูลเป็น Integer หรือตัวเลขได้โดยใช้ประเภทข้อมูลที่มีอยู่หลากหลายประเภท ตัวอย่างของประเภทข้อมูลที่ใช้บันทึกเป็น Integer ได้แก่:
TINYINT: เป็นประเภทข้อมูลที่ใช้บันทึกตัวเลขจำนวนเต็มขนาดเล็กที่มีค่าระหว่าง -128 ถึง 127 หรือ 0 ถึง 255 ขึ้นอยู่กับการกำหนดค่า UNSIGNED.
SMALLINT: เป็นประเภทข้อมูลที่ใช้บันทึกตัวเลขจำนวนเต็มขนาดเล็กกว่า INT โดยมีค่าระหว่าง -32,768 ถึง 32,767 หรือ 0 ถึง 65,535 ขึ้นอยู่กับการกำหนดค่า UNSIGNED.
INT: ( แนะนำ ) เป็นประเภทข้อมูลที่ใช้บันทึกตัวเลขจำนวนเต็มมีค่าระหว่าง -2,147,483,648 ถึง 2,147,483,647 หรือ 0 ถึง 4,294,967,295 ขึ้นอยู่กับการกำหนดค่า UNSIGNED.
BIGINT: เป็นประเภทข้อมูลที่ใช้บันทึกตัวเลขจำนวนเต็มมีค่าระหว่าง -9,223,372,036,854,775,808 ถึง 9,223,372,036,854,775,807 หรือ 0 ถึง 18,446,744,073,709,551,615 ขึ้นอยู่กับการกำหนดค่า UNSIGNED.
DECIMAL: เป็นประเภทข้อมูลที่ใช้บันทึกตัวเลขที่มีทศนิยมแบบคงที่ (Fixed-point number) โดยระบุความยาวทศนิยมในความถูกต้อง.
สร้างชื่อฐานข้อมูล Database name ตั้งชื่อหลัก เช่น ชื่อเซิฟร์เวอร์ เช่น mtasa
1. Collation เลือกเป็น utf8_general_ci
2. Create table : Name : ให้ตั้งชื่อตาราง แนะนำ mtasa
สร้างตารางที่จำเป็นในฐานข้อมูลใน MySQL
ID: เป็น key id หลัก จำเป็นต้องใช้ ประเภทที่จะใช้ PRIMARY
Name: ชื่อเป็นข้อมูลเป็น String ประเภทที่จะใช้ VARCHAR
Age: อายุเป็นข้อมูลเป็น Integer ประเภทที่จะใช้ VARCHAR
Position: ตำแหน่งพิกัดจะเป็นข้อมูลเป็น Table ที่แปลงเป็น String ผ่าน JSON ประเภทที่จะใช้ VARCHAR
1. สร้างตาราง ID
1.1. Name: ตั้งชื่อเป็น แนะนำ เป็น ID
1.2. Type: จำเป็นต้องใช้ INT
1.3. Length/Values: จำนวน แนะนำ 4 เท่ากับ แสนล้านไอดี
1.4. Attributes: แนะนำ UNSIGNED หรือ UNSIGNED ZEROFILL
1.5. Index: เป็น PRIMARY คือตั้งเป็น key หลัก
1.6. A_I: ติ้กถูก สร้างข้อมูลนี้โดยออโต้
2. สร้างตาราง Name
2.1. Name: แนะนำใช้ Name
2.2. Type: VARCHAR
2.3. Length/Values: จำนวนสูงสุด แนะนำ 25
3. สร้างตาราง Age
3.1 Name: แนะนำใช้ Age
3.2. Type: INT
3.3. Length/Values: 4
3.4. Default: As defined: คือค่าเริ่มต้น แนะนำ 0
4. สร้างตาราง Position
2.1. Name: แนะนำใช้ Position
2.2. Type: VARCHAR
2.3. Length/Values: จำนวนสูงสุด แนะนำ 100
วิธีบันทึกข้อมูลลงในฐานข้อมูล
-- ตัวแปรชื่อ str ซึ้งเป็น string หรือ ข้อความ
local str = "Hello World!!"
-- ตัวแปรชื่อ age ซึ้งเป็น integer หรือ ตัวเลขเต็ม
local age = 18
-- ตัวแปรชื่อ position ซึ้งเป็น table หรือ ตาราง
-- ไม่สามารถเก็บข้อมูล table ได้โดยตรง เราต้องแปลงข้อมูลนี้เป็น string โดยผ่าน JSON
local position = { 122.05156, -210.1526, 12.974132 }
-- ตรวจสอบตารางชื่อ Name โดยใช้ข้่อมูลในตัวแปร str
local result, num_affected_rows, last_insert_id = exports.mysql:_QuerySingle ( "SELECT * FROM `mtasa` WHERE `Name` = ?", str )
-- ตรวจสอบว่าในฐานข้อมูลมีจำนวนข้อมูลตตารางชื่อ Name มีจำนวนเท่าไร
-- 0 คือ ไม่มีในฐานข้อมูลเลย
-- 1 หรือมากกว่า คือมีข้อมูลตามจำนวนข้างต้น
if num_affected_rows == 0 then
-- ( `Name`, `Age`, `Position`) ข้อความนี้ต้องตรงกับชื่อตารางในฐายข้อมูล ( ?, ?, ? ) ต้องมีจำนวน ? ที่เท่ากับ จำนวนตารางที่เราจะบันทึกเช่นเรามี 3 ตาราง ก็ต้องมี ? ถึง 3 ตัว
-- ตัวแปรแรก str จะบันทึกลงในตารางชื่อ Name โดยเรียงจากซ้ายไปขวา
-- age จะบันทึกลงในตารางชื่อ Age
-- toJSON( position ) จะบันทึกลงในตารางชื่อ Position ตัวสุดท้ายจะแปลกที่สุดเพราะเราต้องแปลงข้อมูล Table หรือ ตาราง เป็นข้อความก่อนบันทึกลงฐานข้อมูล โดยใช้ toJSON () หลังแปลงเสร็จข้อความจะเป็น '[ [ 122.05156 ], [ -210.1526 ], [ 12.974132 ] ]'
exports.mysql:_Exec( "INSERT INTO `mtasa` ( `Name`, `Age`, `Position`) VALUES ( ?, ?, ? )", str, age, toJSON( position ) )
else
outputChatBox( "ข้อมูลนี้มีอยู่แล้ว." )
end
วิธีดึงข้อมูลจากฐานข้อมูล ลูป ทั้งหมด
-- เราจะดึงข้อมูลทั้งหมดในฐานข้อมูล
local result, num_affected_rows, last_insert_id = exports.mysql:_QuerySingle ( "SELECT * FROM `mtasa`" )
-- ตรวจสอบว่าจำนวนข้อมูลที่ดึงมามีมากกว่า 1 หรือไม่
if num_affected_rows >= 1 then
-- วิธีเรียกใช้ข้อมูลในตาราง
-- 1 คือ จำนวนข้อมูลแรกสุดที่อยู่ในฐานข้อมูล
-- Name คือชื่อตารางในฐานข้อมูล
-- คือนี้การกำหนดแบบตายตัว
outputChatBox( result[ 1 ][ "Name" ] )
outputChatBox( "#############################################")
-- วิธีเรียกใช้ข้อมูลแบบ ลูปตามจำนวน ข้อมูลในฐานข้อมูล
for i=1, num_affected_rows do
outputChatBox( "ชื่อ: " .. result[ i ][ "Name" ] .. " อายุ: " .. result[ i ][ "Age" ] .. " ตำแหน่งพิกัด: " .. result[ i ][ "Position" ] )
-- ข้อความที่จะแสดง
-- "ชื่อ: Hello World!! อายุ: 18 ตำแหน่งพิกัด: [ [ 122.05156 ], [ -210.1526 ], [ 12.974132 ] ]"
-- ซึ้งข้อมูล Position ยังไม่ได้แปลงกลับมาเป็น Table เราต้องใช้ fromJSON() เพื่อแปลงกลับ
local pos = fromJSON( result[ i ][ "Position" ] )
-- วิธีดึงข้อมูลใน ตาราง
outputChatBox( "x: " .. pos[ 1 ] .. " y: " .. pos[ 2 ] .. " z: " .. pos[ 3 ] )
-- ข้อความที่จะแสดง
-- "x: 122.05156 y: -210.1526 z: 12.974132"
end
else
outputChatBox( "ไม่พบข้อมูล" )
end
วิธีดึงข้อมูล แบบกำหนด index
-- เราจะดึงข้อมูลทั้งหมดในฐานข้อมูล
local result, num_affected_rows, last_insert_id = exports.mysql:_QuerySingle ( "SELECT * FROM `mtasa`" )
-- ตรวจสอบว่าจำนวนข้อมูลที่ดึงมามีมากกว่า 1 หรือไม่
if num_affected_rows >= 1 then
-- result[ 1 ] / 1 คือค่า index หรือดึงข้อมูลในตารางอันแรกสุด สามารถใส่ตัวเลขตามจำนวนข้อมูลมี
local name = result[ 1 ][ "Name" ]
local age = result[ 1 ][ "Age" ]
local pos = result[ 1 ][ "Position" ]
-- นำตัวแปรมาแสดง
outputChatBox( "ชื่อ: " .. name .. " อายุ: " .. age .. " ตำแหน่งพิกัด: " .. pos )
-- ซึ้งตัวแปร pos ยังไม่ได้แปลงกลับมาเป็น Table เราต้องใช้ fromJSON() เพื่อแปลงกลับ
local posTable = fromJSON( pos )
-- วิธีดึงข้อมูลใน ตาราง
outputChatBox( "x: " .. posTable[ 1 ] .. " y: " .. posTable[ 2 ] .. " z: " .. posTable[ 3 ] )
else
outputChatBox( "ไม่พบข้อมูล" )
end
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น