PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

ทบทวนการใช้งาน query builder เพิ่มเติม สำหรับการ select ข้อมูล

15 September 2015 By


สำหรับเนื้อหาต่อไปนี้ จะขอพูดถึงในเชิงแยกออกมาจากโปรเจ็คของเรา
มาดูในเรื่องของการใช้งาน query builder class ในส่วนของการ select
ข้อมูลจากฐานข้อมูล ในรุปแบบต่างๆ เพื่อเป็นแนวทางในกาารนำไปประยุกต์
ในโปรเจ็คของเราต่อไปเพิ่มเติม
 

คำสั่ง sql ฐานข้อมูลต่าง และข้อมูลที่เราจะใช้ประกอบคำอธิบาย

CREATE TABLE IF NOT EXISTS `tbl_customer` (
  `cus_id` int(11) NOT NULL AUTO_INCREMENT,
  `cus_name` varchar(100) COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`cus_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=6 ;

--
-- Dumping data for table `tbl_customer`
--

INSERT INTO `tbl_customer` (`cus_id`, `cus_name`) VALUES
(1, 'Cus A'),(2, 'Cus B'),(3, 'Cus C'),(4, 'Cus D'),(5, 'Cus E');

-- --------------------------------------------------------

--
-- Table structure for table `tbl_order`
--

CREATE TABLE IF NOT EXISTS `tbl_order` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT,
  `cus_id` int(11) NOT NULL,
  `pro_id` int(11) NOT NULL,
  PRIMARY KEY (`order_id`),
  KEY `cus_id` (`cus_id`,`pro_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=11 ;

--
-- Dumping data for table `tbl_order`
--

INSERT INTO `tbl_order` (`order_id`, `cus_id`, `pro_id`) VALUES
(1, 1, 3),(2, 2, 3),(3, 1, 4),(4, 3, 5),(5, 1, 5),(6, 3, 5),(7, 5, 2),(8, 5, 4),(9, 3, 2),(10, 5, 5);

-- --------------------------------------------------------

--
-- Table structure for table `tbl_product`
--

CREATE TABLE IF NOT EXISTS `tbl_product` (
  `pro_id` int(11) NOT NULL AUTO_INCREMENT,
  `pro_name` varchar(100) COLLATE utf8_general_ci NOT NULL,
  `pro_price` int(11) NOT NULL,
  PRIMARY KEY (`pro_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=6 ;

--
-- Dumping data for table `tbl_product`
--

INSERT INTO `tbl_product` (`pro_id`, `pro_name`, `pro_price`) VALUES
(1, 'Pro 111', 100),(2, 'Pro 222', 200),(3, 'Pro 333', 100),(4, 'Pro 444', 250),
(5, 'Pro 555', 400);
 

 
 
ใครที่กำลังศึกษาไปพร้อมๆ กัน ก็สามารถเอาคำสั้ง sql นี้ไปรัน ใน phpmyadmin เพื่อสร้างชุด
ข้อมูลทดสอบนี้ได้
 

ตารางและข้อมูลที่เกี่ยวข้อง

 
tbl_order
tbl_customer
tbl_product
order_id cus_id pro_id
1 1 3
2 2 3
3 1 4
4 3 5
5 1 5
6 3 5
7 5 2
8 5 4
9 3 2
10 5 5
cus_id cus_name
1 Cus A
2 Cus B
3 Cus C
4 Cus D
5 Cus E
pro_id pro_name pro_price
1 Pro 111 100
2 Pro 222 200
3 Pro 333 100
4 Pro 444 250
5 Pro 555 400
 
 

การ select ข้อมูลจากฐานข้อมูลด้วย query builder class

 
ในที่นี้จะขอใช้หน้า admin_home.php จากโปรเจ็คเรามาเป็นไฟล์สำหรับเขียนโค้ดทดสอบ
ใครที่กำลังศักษา ไม่ต้องทำตามก็ได้ ลองอ่านดูเป็นแนวทาง สำหรับใครที่ทดสอบทำตามก็
ให้เปิดไฟล์ admin_home.php ในโฟลเดอร์ apps > views > admin และทดสอบเขียนโค้ดใน
ไฟล์นี้ได้เลย
 
 

$this->db->get()

 
เรามาเริ่มที่รูปแบบโค้ดการคิวรี่ข้อมูลมาแสดง พื้นฐานที่เราต้องรู้และใช้บ่อย
 
ก็คือการใช้ฟังก์ชั่น
 
$this->db->get()
 
ตัวอย่างเราต้องการดึงข้อมูลจากตาราง tbl_customer 
ก็จะได้เป็น
 
$this->db->get("tbl_customer");

// คำสั่ง sql : 
// SELECT * FROM tbl_customer
 
โดยในฟังก์ชั่นนี้เรา สามารถกำหนดขอบเขตของข้อมูลที่ต้องการแสดง หรือก็คือ limit
ได้ด้วยการกำหนด parameter ตัวที่ 2 กับ 3 
 
$this->db->get("tbl_customer",3,2);

// คำสั่ง sql : 
// SELECT * FROM tbl_customer LIMIT 2,3
 
parameter ตัวที่สองคือจำนวนรายการที่ต้องการแสดง (limit)
parameter ตัวที่สามคือ เริ่มจากตำแหน่งที่ (offset)
 
(ระวังสับสนระหว่างการกำหนดสองค่านี้ เช่น เราต้องการ LIMIT 0,5 เราต้องกำหนดเป็น 5,0 เป็นต้น)
 
เรามาดูโค้ดการดึงข้อมูลและนำข้อมูลมาแสดง สำหรับกรณีวนลูปแสดง
ข้อมูลจากตาราง จะได้เป็นดังนี้
 
<?php
$query = $this->db->get("tbl_customer");

$total = $query->num_rows();  // จำนวนข้อมูลจากการคิวรี่ทั้งหมด
if($total>0){ // เช็คว่ามีค่ามากว่า 0 หรือไม่
    foreach ($query->result_array() as $row)  // วนลูปแสดงข้อมูล
    {
            echo $row['cus_id'];
            echo $row['cus_name'];
            echo "<br>";
    }
}
?>
 
 
 

$this->db->get_where()

 
การคิวรี่ข้อมุลมาแสดงแบบกำหนดเงื่อนไข เหมาะกับการใช้ในการดึงข้อมูลของรายการใด
รายการหนึ่งมาแสดง เรามักจะใช้งานฟังก์ชั่น
 
$this->db->get_where()
 
เช่นเราอยากรู้ว่าตาราง tbl_customer ที่มี cus_id เท่ากับ 3 มีข้อมูลอะไรบ้าง ก็จะได้เป็น
 
$this->db->get_where("tbl_customer",array('cus_id'=>3));

// คำสั่ง sql : 
// SELECT * FROM tbl_customer WHERE cus_id=3
 
เช่นเดียวกันคำสั่ง นี้ก็สามารถกำหนด limit และ offset เข้าไปได้ดังนี้
 
$this->db->get_where("tbl_customer",array('cus_id'=>3),1,0);

// คำสั่ง sql : 
// SELECT * FROM tbl_customer WHERE cus_id=3 LIMIT 1 
// ถ้าค่า offset เป็น 0 คำสั่ง sql จะแสดงเพียงค่า limit เท่านั้น
 
ที่นี้เรามาดูรูปแบบการคิวรี่และแสดงข้อมูลรายการเดียว เราจะใช้คำสั่งและรูปแบบดังต่อไปนี้
 
<?php
$query = $this->db->get_where("tbl_customer",array('cus_id'=>3));

$row = $query->row_array();  //คิวรี่ข้อมูลมาแสดงแค่รายการเดียว
if(isset($row))  // ถ้ามีข้อมูล 
{
    echo $row['cus_id'];
    echo $row['cus_name'];
    echo "<br>";
}
?>
 
 

$this->db->select()

 
สำหรับฟังก์ชั่นต่อมา ใช้สำหรับการคิวรี่ข้อูลแบบระบุฟิลด์ที่ต้องการ ซึ่งปกติ ถ้าเรา
ใช้คำสั้ง $this->db->get() ก็จะดึงข้อมูลทุกฟิลด์มาแสดง ซึ่งก็คล้ายคำสั่ง SELECT *
แต่ถ้าหากเราต้องการระบุฟิลด์ที่ต้องการ เราจะใช้ฟังก์ชั่นนี้มาช่วย
 
$this->db->select()
 
เราต้องการดึงข้อมูลจากตาราง tbl_product โดยดึงเฉพาะ pro_name กับ pro_price
จะได้เป็น
 
$this->db->select("pro_name,pro_price");    
$query = $this->db->get("tbl_product");

// คำสั่ง sql : 
// SELECT pro_name,pro_price FROM tbl_product
 
 
 

$this->db->select_max()

$this->db->select_min()

$this->db->select_avg()

$this->db->select_sum()

 
ฟังก์ชั่นสำหรับค่าทางคณิตศาสตร์หรือสถิติเบื้องต้น ได้แก่ 
$this->db->select_max() หาค่าสูงสุด
$this->db->select_min()  หาค่าตำสุด
$this->db->select_avg() หาค่าเฉลี่ย
$this->db->select_sum()  หาผลรวม
 
โดยรูปแบบการใช้งานของฟังก์ชั่นทั้ง 4 จะเหมือนกัน ขอยกส่วนของการ
หารผลรวมมาอธิบาย
 
จากตาราง tbl_product เราต้องการดูราคารวมของสินค้าทั้งหมด
จะได้เป็น
 
$this->db->select_sum('pro_price');
$query = $this->db->get("tbl_product");

// คำสั่ง sql : 
// SELECT SUM(pro_price) AS pro_price FROM tbl_product
 
หากเราต้องการกำหนดเป็นชื่ออื่น สามารถทำได้ดังนี้
 
 
$this->db->select_sum('pro_price','total_price');
$query = $this->db->get("tbl_product");

// คำสั่ง sql : 
// SELECT SUM(pro_price) AS total_price FROM tbl_product
 
 

$this->db->from()

 
ฟังก์ชั่นต่อมาคือในส่วนของ FROM ในคำสั่งคิวรี่ ใช้สำหรับระบุตาราง ที่ต้องการ
โดยเมื่อเรากำหนดตารางเข้าไปในฟังก์ชั่นนี้แล้ว ใน่ส่วนของฟังก์ชั่น 
$this->db->get() เราไม่จำเป็นต้องระบุชื่อตารางอีก 
 
ตัวอย่างเราต้องการดึงข้อมูลทั้งหมดของตาราง tbl_order
 
$this->db->from('tbl_order');
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM tbl_order
 
จะเห็นว่า กรณีเราเลือกทุกฟิลด์มาแสดง เราไม่จำเป็นต้องกำหนด select() ฟังก์ชั่นก็ได้
 
$this->db->from('tbl_order a');
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_order` `a`
 
แบบกำหนดชื่อเรียกไว้อ้างอิง ก็สามารถทำได้เช่นกัน
 
 
 

$this->db->get_compiled_select()

 
ก่อนจะไปต่อในส่วนอื่นๆ เราจะมาแนะนำฟังก์ชั่นที่ใช้สำหรับดูค่าคำสั่ง sql 
ที่สร้างจาก query builder class ว่าคำสั่งที่เราใช้นั้น ถูกต้องตรงตามที่เราต้องการหรือไม่
โดยสามารถกำหนดได้ดังนี้
 
$this->db->from('tbl_order');
echo $this->db->get_compiled_select(null,FALSE); // สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();
 
เราจะแทรกไว้ก่อนฟังก์ชั่น  $this->db->get() และกำหนดค่า FALSE เพื่อให้คำสั่ง sql
นั่นทำงานต่อมาจนถึงฟังก์ชั่น $this->db->get() เพื่อคิวรี่ข้อมูลมาแสดง
จากคำสั่งนี้ จะมีการแสดงคำสั่ง sql จากการใช้งาน query builder 
หากเราไม่ได้ใช้งานแล้วก็สามารถ comment ปิดไปได้ ในที่นี้ขอเก็บไว้
 
 

$this->db->join()

 
การเชื่อมตารางหรือการคิวรี่ข้อมูลจากตารางที่มีความสัมพันธ์กัน สามารถทำได้โดยใช้ฟังก์ชั่น 
$this->db->join() 
 
ตัวอย่างเช่น เราต้องการดึงข้อมูลจากตาราง tbl_order และ tbl_product โดยข้อมูลทั้งสองตาราง
จะต้องสัมพันธ์กัน ว่า pro_id ของทั้งสองตารางจะต้องเท่ากัน สามารถทำได้ดังนี้
 
$this->db->from('tbl_order');
$this->db->join('tbl_product','tbl_order.pro_id=tbl_product.pro_id');
echo $this->db->get_compiled_select(null,FALSE); // สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_order` JOIN `tbl_product` ON `tbl_order`.`pro_id`=`tbl_product`.`pro_id`
 
 
หรือถ้าเราต้องการกำหนดชื่อเรียกให้กับตาราง เพื่อให้เรียกใช้งานง่ายขึ้นสามารถทำได้ดังนี้
 
 
$this->db->from('tbl_order a');
$this->db->join('tbl_product b','a.pro_id=b.pro_id');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_order` `a` JOIN `tbl_product` `b` ON `a`.`pro_id`=`b`.`pro_id`
 
 
หากต้องการระบุรูปแบบของการ join ตาราง เช่น left, right, outer, inner, left outer, and right outer
ให้เราระบุเพิ่มเข้าไปใน parameter ตัวที่ 3  เช่น เราต้องการให้ตาราง tbl_order และ tbl_product เชื่อมกัน
แบบ left join สามารถทำได้ดังนี้
 
$this->db->from('tbl_order a');
$this->db->join('tbl_product b','a.pro_id=b.pro_id','left');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_order` `a` LEFT JOIN `tbl_product` `b` ON `a`.`pro_id`=`b`.`pro_id`
 
 
หากต้องการเชื่อมมากกว่า สองตาราง เช่น เราต้องการเชื่อมตาราง tbl_order , tbl_product และ tbl_customer 
แบบ left join ก็สามารถทำได้ดังนี้
 
$this->db->from('tbl_order a');
$this->db->join('tbl_product b','a.pro_id=b.pro_id','left');
$this->db->join('tbl_customer c','a.cus_id=c.cus_id','left');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_order` `a` 
// LEFT JOIN `tbl_product` `b` ON `a`.`pro_id`=`b`.`pro_id` 
// LEFT JOIN `tbl_customer` `c` ON `a`.`cus_id`=`c`.`cus_id`
 
 
 

$this->db->where()

 
การคิวรี่ข้อมูลแบบมีเงื่อนไขอย่างง่าย เราสามารถใช้งาน $this->db->get_where() ได้เลย แต่สำหรับ
กรณีการใช้งานเพิมเติม หรือมีเงื่อนไขจำนวนมาก เราสามารถใช้งานฟังก์ชั่นนี้ระบุชี้ชัดรูปแบบเงื่อนไขได้
รูปแบบการใช้งานของฟังก์ชั่น where() นี้สามารถกำหนดได้ดังนี้
 
1. รูปแบบ key / value 
ตัวอย่างต้องการดังข้อมูลจากตาราง tbl_product ที่ราคาสินค้า = 100 
 
$this->db->from('tbl_product');
$this->db->where('pro_price',100);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` = 100
 
การกำหนดในลักษณะนี้จะกำหนดให้มีค่า การเทียบโดยใช้เครื่องหมาย = ให้อัตโนมัติ
ถ้าเราเพิ่มเงื่อนไขหลายอัน ก็จะถูกเชื่อมด้วย AND 
 
$this->db->from('tbl_product');
$this->db->where('pro_price',100);
$this->db->where('pro_name','Pro 333');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` = 100 AND `pro_name` = 'Pro 333'
 
 
2. รูปแบบ key / value แบบกำหนดเอง 
ใช้สำหรับ กรณีไม่ได้ตรวจสอบการเท่ากันของข้อมูล โดยเรา
สามารถแทรก ส่วนของเครื่องหมายท่างคณิตศาสตร์ เพื่อเปรียบเทียบค่าของข้อมูลได้
เช่นต้องการดึงข้อมูลจากตาราง tbl_product ที่เราค่ามากกว่า 200 สามารถทำได้ดังนี้
 
$this->db->from('tbl_product');
$this->db->where('pro_price >',200);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` > 200
 
 
ต้องการตรวจสอบตาราง tbl_product ที่มีราคาอยู่ระหว่าง 200 ถึง 300 บาท
 
$this->db->from('tbl_product');
$this->db->where('pro_price >=',200);
$this->db->where('pro_price <=',300);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` >= 200 AND `pro_price` <= 300
 
เครื่องหมายอื่นๆ เช่น != > < >= <=
 
 
3. การกำหนดแบบ array การใช้งานรูปแบบนี้ 
จะมีประโยชน์กรณีเราต้องการเก็บค่าข้อมูลหรือจัดรูปแบบข้อมูล
จากฟังก์ชั่นหรือการใช้งานส่วนอื่น แล้วค่อยนำมาใช้การกำหนดเงื่อนไข where
 
$arr_condition=array(
    'pro_price >=' =>200,
    'pro_price <=' =>300
);
$this->db->from('tbl_product');
$this->db->where($arr_condition);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` >= 200 AND `pro_price` <= 300
 
4. แบบกำหนดเองชุดสั่ง sql เข้าไปเลย

$this->db->from('tbl_product');
$this->db->where('pro_price >=200 AND pro_price<=300');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` >= 200 AND `pro_price` <= 300
 
 

$this->db->or_where()

 
หากต้องการเปลี่ยนจากการเชื่อม AND เป็น OR สำหรับเงื่อนไข WHERE ให้ใช้ฟังก์ชั่นนี้แทน
ส่วนการใช้งานก็คล้ายกับฟังก์ชั่น $this->db->where()
ตัวอย่างการใช้งานร่วมกัน สมมติเราต้องการรายการสินค้า น้อยกว่าเท่ากับ 100
หรือ  ที่มากกว่าเท่ากับ 300 จากตาราง tbl_product สามารถทำได้ดังนี้
 
$this->db->from('tbl_product');
$this->db->where('pro_price <=',100);
$this->db->or_where('pro_price >=',300);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` <= 100 OR `pro_price` >= 300
 
 

$this->db->where_in()

 
หากต้องการคิวรี่ข้อมูลจากฐานข้อมูลที่มีฟิลด์ที่ต้องการอยู่ในชุดข้อมูลที่กำหนดหรือไม่
เช่น สมมติเราต้องการสินค้าในตาราง tbl_product ที่มีราคาเท่ากับ 100 200 หรือ 500
จะได้เป็น
 
$setData = array(100,200,300);
$this->db->from('tbl_product');
$this->db->where_in('pro_price',$setData);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` IN(100, 200, 300)
 
ฟังก์ชั่นที่มีรูปแบบการใช้งานเหมือนกัน แตกต่างที่เงื่อนไข
$this->db->or_where_in()  เมื่อต้องการใช้การเชื่อมด้วย OR
$this->db->where_not_in()  เมื่อต้องการตรวจว่า ไม่มีข้อมูลตรงตามเซ็ตข้อมูลที่ระบุ
$this->db->or_where_not_in() เมื่อต้องการใช้การเชื่อมด้วย OR กับข้อมูลที่ไม่ตรงตามเซ็ตข้อมูลที่ระบุ
 
 

$this->db->like()

 
ต่อมาที่ฟังก์ชั่นสำหรับตรวจข้อมูลที่คล้ายกัน ใช้กับพวกข้อความต่างๆ ที่ต้องการตรวจสอบว่า
ตรงกับคำหรือข้อความที่ระบุหรือไม่ ส่วนใหญ่เราจะพบบ่อยในการค้นหาข้อมูล
ตัวอย่างสมมติเราต้องการดูชื่อสินค้าในตาราง tbl_product ที่มีชื่อสินค้ามีคำว่า 22
 
$this->db->from('tbl_product');
$this->db->like('pro_name',22);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_name` LIKE '%22%' ESCAPE '!'
 
นอกนั้นเรายังสามารถกำหนดเงื่อนไขการตรวจสอบข้อมูลเพิ่มเติม โดยการระบุว่า both before หรือ after
both คือ ขึ้นต้นหรือลงท้ายด้วยอะไรก็ได้ แต่ให้มีข้อความที่ระบุอยู่ในนั้น
ปกติค่า both จะเป็นค่าเริ่มต้น ถ้าเราไม่ระบุ ก้จะเป็นค่านี้อยู่แล้ว ตามคำสั่ง sql คือจะมี % ทั้งก่อนและหลัง
before คือ ขึ้นต้นด้วยอะไรก็ได้แต่ต้องลงท้ายด้วยข้อความที่เราต้องการตรวจสอบ จะมี % อยู่ด้านหน้า
after คือ ลงท้ายด้วยอะไรก็ได้ แต่ต้องขึ้นต้นข้อความที่ต้องการตรวจสอบ และมี % อยู่ด้านหลัง
 
ตัวอย่างการใช้งาน
 
$this->db->from('tbl_product');
$this->db->like('pro_name',22,'before');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_name` LIKE '%22' ESCAPE '!'
 
 
ฟังก์ชั่นที่มีรูปแบบการใช้งานเหมือนกัน แตกต่างที่เงื่อนไข
$this->db->or_like()  เมื่อต้องการตรวจสอบข้อมูลที่ตรง และใช้การเชื่อมด้วย OR
$this->db->not_like()  เมื่อต้องการตรวจว่า ข้อมูลไม่ตรงตามเงื่อนไข
$this->db->or_not_like() เมื่อต้องการใช้การเชื่อมด้วย OR กับข้อมูลไม่ตรงตามเงื่อนไข
 
 

$this->db->group_by()

 
ฟังก์ชั่นในการจัดกลุ่มข้อมูล หรือส่วนของ GROUP BY ในคำสั่ง sql 
ปกติจะใช้สำหรับ จัดการกับชุดของข้อมูล เช่น หาว่าชุดข้อมูลนั้น มีผลรวมเท่าไหร่
ตัวอย่าง เราต้องการนับว่า ในตาราง tbl_order สินค้าแต่ละประเภทมีรายการสั่งซื้อเท่าไหร่
 
$this->db->select('COUNT(*) as num_pro');    
$this->db->from('tbl_order');
$this->db->group_by('pro_id');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT COUNT(*) as num_pro FROM `tbl_order` GROUP BY `pro_id`
 
 

$this->db->having()

 
ฟังก์ชั่นนี้ใช้สำหรับเลือกข้อมูลที่ได้จากการ GROUP BY อีกที เช่นจากตัวอย่างการใช้ GROUP BY ของโค้ดด้านบน
เพื่อหาว่าสินค้าที่ละรายการมีจำนวนที่สั่งมาเท่าไหร่ ที้นี้เราจะมาตรวจสอบว่า ต้องการเฉพาะจำนวนที่มากกว่า 3 รายการ
หรือกคือ num_pro จากตัวอย่างที่แล้วมากกว่า 3
 
$this->db->select('COUNT(*) as num_pro');        
$this->db->from('tbl_order');
$this->db->group_by('pro_id');
$this->db->having('num_pro >',3);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT COUNT(*) as num_pro FROM `tbl_order` GROUP BY `pro_id` HAVING `num_pro` > 3
 
หากต้องการใช้งานเชื่อมด้วย OR ให้ใช้งานฟังก์ชั่น  $this->db->or_having()
 
 

$this->db->order_by()

 
ส่วนเกือบสุดท้าย ฟังก์ชั่นสำหรับจัดเรียงข้อมูล รูปแบบการใช้งานง่าย
ตัวอย่าง สมมติเราต้องการแสดงข้อมูลตาราง tbl_product เรียงราคาจาก มากไปน้อย ก็สามารถกำหนดได้เป็น
 
$this->db->from('tbl_product');
$this->db->order_by('pro_price','DESC');
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` ORDER BY `pro_price` DESC
 
เราสามารถกำหนดในรูปแบบต่อไปนี้ได้ เช่น
 
$this->db->order_by('pro_price DESC');
 
หรือกำหนดหลายๆ เงื่อนไข
 
$this->db->order_by('pro_price DESC,pro_name ASC');
 
หรือ
 
$this->db->order_by('pro_price','DESC');
$this->db->order_by('pro_name','ASC');
 
หากต้องการ RANDOM 
 
$this->db->order_by('pro_nam', 'RANDOM');
 
 

$this->db->limit()

 
การกำหนด limit และ offset ของข้อมูลที่ต้องการแสดง ซึ่งเราได้อธิบายไปบ้างแล้วในตอนแรก
ของเนื้อหาบทความนี้ ก็มาดูการใช้งานกันเลย
 
$this->db->from('tbl_product');
$this->db->limit(3,2);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` LIMIT 2, 3
 
 

$this->db->count_all()

 
ฟังก์ชั่นสำหรับหาจำนวนแถวทั้งหมดของข้อมูลในตาราง ตัวอย่าง
เราต้องการรู้ว่าตาราง tbl_order มีรายการทั้งหมดกี่รายการ
 
$total = $this->db->count_all('tbl_order');    
echo $total;
 
 

$this->db->count_all_results()

 
เป็นฟังก์ชั่นสำหรับหาจำนวนของข้อมูลจากผลของการคิวรี่ตามเงื่อนไขต่างๆ ที่เรากล่าวไปแล้ว
เหมาะสำหรับมาใช้ในการค้นหา และแบ่งหน้าข้อมูลจากผลการค้นหาอีกที
 
$this->db->from('tbl_product');
$this->db->where('pro_price >200');
$total_result = $this->db->count_all_results(null,FALSE); 
echo $total_result;
$this->db->limit(3,2);
echo $this->db->get_compiled_select(null,FALSE);// สำหรับโชว์คำสั่ง sql ลบออกถ้าไม่ใช้
$query = $this->db->get();

// คำสั่ง sql : 
// SELECT * FROM `tbl_product` WHERE `pro_price` > 200 LIMIT 2, 3
 
จะเห็นว่าฟังก์ชั่นนี้จะทำงานก่อนใช้งาน limit ฟังก์ชั่น ค่าที่ได้ก่อน limit จะเป็นจำนวนทั้งหมด
ที่เป็นไปตามเงื่อนไข where แต่หลังจากใช้ฟังก์ชั่น limit จะไม่มีข้อมูลในตำแหน่งดังกล่าว
ฟังก์ชั่นนี้เราเคยใช้มาแล้วในส่วนของการแบ่งหน้าและการค้นหาข้อมูล
 
 

ฟังก์ชั่นของ query builder ในรุปแบบ chaining

 
เป็นรุปแบบการใช้งานการเรียกใช้ฟังก์ชั่นต่างๆ แบบผูก เขียนต่อๆ กัน ทำให้เราเขียนโค้ดได้กระชับขึ้น
ดูตัวอย่าง
 
$this->db->from('tbl_order a');
$this->db->join('tbl_product b','a.pro_id=b.pro_id','left');
$this->db->join('tbl_customer c','a.cus_id=c.cus_id','left');
$this->db->order_by('b.pro_price','desc');
$this->db->limit(5,10);
$query = $this->db->get();
 
เราสามาถเขียนในรูปแบบ chaining ได้ดังนี้
 
$query = $this->db->from('tbl_order a')
->join('tbl_product b','a.pro_id=b.pro_id','left')
->join('tbl_customer c','a.cus_id=c.cus_id','left')
->order_by('b.pro_price','desc')
->limit(5,10)
->get();
 
แบบนี้เป็นต้น ขอจบในส่วนการทบทวนเพิ่มเติมเกี่ยวกับการใช้งาน query builder ไว้เท่านี้

Tags:: codeigniter query builder

เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   





URL สำหรับอ้างอิง