Skip to main content

ตัวอย่างการ Query ข้อมูลจาก Database ด้วย Gorm

Query without condition

image.png

คำสั่ง query {First, Take, Last}

First จะทำการ order table และ query เอาตัวแรกสุด(เอาตัวแรกสุด (index 1) ของ table

Take จะทำการ query ข้อมูลของ table โดยจะ limit เอาแค่ตัวเดียว

Last  จะทำการ order table และ query เอาตัวสุดท้าย (indexlast last)index) ของ table 

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Employees struct {
	Emp_no uint
	//birth_date *time.Time `gorm:"not null"`
	First_name string
	Last_name  string
	Gender     string
	//hire_date  *time.Time `gorm:"not null"`
}

func main() {
	dsn := "workshop01:DBpAhVUgCMDSLwwP@tcp(gdsc-int.sit.kmutt.ac.th:13306)/workshop01?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("fail connection")
	} else {
		fmt.Println("Connecting successful")

	}
  
	var emp Employees
  
	fmt.Println("-----------------------------------------")
  	db.First(&emp)
	// SELECT * FROM empolyees ORDER BY id LIMIT 1;
	db.First(&emp)
	fmt.Println(emp)
  
	fmt.Println("-----------------------------------------")
    db.Take(&emp)
	// SQL: SELECT * FROM empolyees LIMIT 1;
	db.Take(&emp)
	fmt.Println(emp)emp
               )
	fmt.Println("-----------------------------------------")
	// Get last record, ordered by primary key desc
  	db.Last(&emp)
	// SQL: SELECT * FROM empolyees ORDER BY id DESC LIMIT 1;
	db.Last(&emp)
	fmt.Println(emp)
  
	fmt.Println("-----------------------------------------")
}

image.png

Query with condition 

  1. การใส่ condition ไว้ ข้างหลังของ table ( db.First("table"<table>, "condition"<condition>) ) คือการใส่ condition query ตรง column แรก table ในที่นี้ คือ  Empno
  2. คือการ query หา empno ที่อยู่ใน arrays ของ [10059, 10052, 10056]
  3. query condition ที่ เราตั้ง condition ให้กับมัน  db.First("table"<table>, "<column ที่จะใช้เป็น condition = ?">, "condition"<condition>)
package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
type Employees struct {
	Emp_no uint
	//birth_date *time.Time `gorm:"not null"`
	First_name string
	Last_name  string
	Gender     string
	//hire_date  *time.Time `gorm:"not null"`
}

func main() {
	dsn := "workshop01:DBpAhVUgCMDSLwwP@tcp(gdsc-int.sit.kmutt.ac.th:13306)/workshop01?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("fail connection")
	} else {
		fmt.Println("Connecting successful")
	}
  
	var emp Employees
  
	fmt.Println("-----------------------------------------")
  	db.First(&emp, 10054)
	// SQL: SELECT * FROM empolyees WHERE emp_no = 10054;
	db.First(&emp, 10054)
	fmt.Println(emp)
  
	fmt.Println("-----------------------------------------")
  	db.Find(&emp, []int{10059, 10052, 10056})
	// SQL: SELECT * FROM empolyees WHERE emp_no in 10059, 10052, 10056;
	db.Find(&emp, []int{10059, 10052, 10056})
	fmt.Println(emp)
  
	fmt.Println("-----------------------------------------")
  	db.First(&emp, "First_name = ?", "Leon")
	// SQL: SELECT * FROM empolyees WHERE First_name = "Leon";
	db.First(&emp, "First_name = ?", "Leon")
	fmt.Println(emp)
  
	fmt.Println("-----------------------------------------")
}

image.png

Query Array 

1.จะเห็นได้ว่า emp ของเรานั้น เก็บข้อมูล struct เพียวแค่คนเดียวเพียงแค่คนเดียว

ทำยังไงถึงจะสามารถเก็บข้อมูลหลายๆคนได้ใน query เดียวละง่ายๆเดียวละ? แค่สร้างตัวแปรที่เก้บค่าง่ายๆ แค่สร้างตัวแปรที่เก็บค่า struct เป็น arraysarray ก็สามารถเก็บข้อมูลได้หลายคน ใน 1 query แล้วเย้แล้ว (เย้!!!)

2. ใน code ที่2ที่ 2 จะเห็นว่า emps นั้นเป้นนั้นเป็น arraysarray ของ struct employees จึงสามารถเก็บข้อมูล query ออกมาได้ หลายคนออกมาได้หลายคน

3. เป็นqueryเป็น query condition ให้เห็นว่า สามารถข้อมูลเป็นสามารถเก็บข้อมูลเป็น array ผ่าน condition ได้ emps จะเก็บข้อมูล ทุกคนที่ชื่อท้ายเป็น "Black pink"

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Employees struct {
	Emp_no uint
	//Birth_date *time.Time
	First_name string
	Last_name  string
	Gender     string
	//Hire_date  *time.Time 
}

func main() {
	dsn := "workshop01:DBpAhVUgCMDSLwwP@tcp(gdsc-int.sit.kmutt.ac.th:13306)/workshop01?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("fail connection")
	} else {
		fmt.Println("Connecting successful")

	}
  
	var emp Employees
  
    fmt.Println("-----------------------------------------")
  	db.Find(&emp, []int{10051, 10052, 10056})
	// SQL: SELECT * FROM empolyees WHERE emp_no in 10059, 10052, 10056;
  	db.Find(&emp, []int{10051, 10052, 10056})
	fmt.Println(emp)
  
    var emps []Employees
  	fmt.Println("-----------------------------------------")
  	db.Find(&emps, []int{10051, 10052, 10056})
	// SQL: SELECT * FROM empolyees WHERE emp_no in 10059, 10052, 10056;
	db.Find(&emps, []int{10051, 10052, 10056})
	fmt.Println(emps)
  
	fmt.Println("-----------------------------------------")
  	db.Find(&emps, "Last_name = ?", "Black pink")
	// SQL: SELECT * FROM empolyees WHERE Last_name = "Black pink";
  	db.Find(&emps, "Last_name = ?", "Black pink")
	fmt.Println(emps)
  
	fmt.Println("-----------------------------------------")

}

image.png