ภาพประกอบ : zend where

zend framework วิธีแสดงข้อมูลแบบมีเงื่อนไข where clause

zend framework เราได้ดูวิธีการเลือกข้อมูลทั้งหมดจากตารางออกมาดูกันไปแล้ว วันนี้เราจะมาดูกันต่อในเรื่องของหากเรามี “เงื่อนไข” เราจะเรียกขึ้นมาดูได้อย่างไรบ้างเป็นรูปแบบของการใช้ where clause นั้นเองครับ

ภาพประกอบ : zend where

ภาพประกอบ : zend where

zend framework วิธีการแสดงข้อมูลจากฐานข้อมูลแบบมีเงื่อนไข where clause

ในการแสดงข้อมูลส่วนใหญ่ เราจะไม่ค่อยได้ใช้งานแบบดึงมาทั้งหมดในฐานข้อมูลตรงๆกันซะทีเดียวหรอกครับ หากเราต้องการใช้งานข้อมูลอะไร หัวข้อไหน จำนวนเท่าไหร่ เงื่อนไขเป็นอย่างไร เราก็จะใช้วิธีดึงข้อมูลออกมาเท่าที่เราจำเป็นต้องใช้กันซะมากกว่า นอกจากจะใช้ “เท่าที่จำเป็น” แล้วมันยังเป็นการทำงานที่ไม่หนักกับทรัพยากรด้วยครับ

ทีนี้เราจะลองมาดูแบบหลากหลายเงื่อนไขกันในบทเดียวเพื่อเทียบวิธีการใช้งานกันไปเลยนะครับ จะได้เห็นภาพชัดเจนกันมากขึ้นกว่ามาลงทีละ function ซึ่งค่อนข้างจะง่ายต่อความเข้าใจอยู่แล้ว

ผมจะขอเริ่มจากวิธีการเลือกข้อมูลในรูปแบบของที่ยังไม่เป็น where เต็มรูปแบบก่อนนะครับ โดยจะขอใช้เงื่อนไขที่น่าจะมีการใช่บ่อยๆอย่างการค้าหาตาม primary key ออกมากันก่อน

Find()

การใช้คำสั่ง find เป็นการใช้คำสั่งที่ให้ zend ไปดึงเอาข้อมูลที่มี primary key เป็นตัวกำหนดซึ่งจะเป็น id หรืออะไรก็ตามแต่ ลองดูแบบ id ค่าเดียวดูก่อนนะครับ

Code zend find
$table = new Application_Model_DbTable_CustomerTbl();
$rows = $table->find(10);

จากตัวอย่างนี้จะเห็นว่า เราทำการเรียกข้อมูลออกมาจากตาราง customer โดยที่ข้อมูลที่ต้องการจะให้แสดงนั้นระบุกำหนดไว้เป็น id ที่ 10 เท่านั้น หน้าตาที่ได้ออกมาก็จะเป็นแบบนี้ครับ

ภาพประกอบ : zend framework find by id

ภาพประกอบ : zend framework find by id

ทีนี้หากเรามีข้อมูลที่ต้องการแสดงมากกว่า 1 id เราก็สามารถทำงานโดยยังใช้ find ได้อยู่เหมือนกัน แต่เราต้องส่งค่าไปในลักษณะของรูปแบบ array แทนครับ

Code zend find multiple
$table = new Application_Model_DbTable_CustomerTbl();
$rows = $table->find(array(1,2,3));

และหากเราจะเขียนในรูปแบบของ MVC เราก็เขียนได้ดังนี้ครับ

 

Controller
public function indexAction()
{
// initial table
$oCustomerTbl = new Application_Model_DbTable_CustomerTbl();
// call function
$oMulRowData      = $oCustomerTbl->findRow(array("1","2","3"));
}
Model
public function findRow($data)
{
// initial table
$oCustomerTbl = new Application_Model_DbTable_CustomerTbl();
// SQL Query
$oCustomerData = $oCustomerTbl->find($data);
// Send To Controller
return($oCustomerData);
}

จาก code เราจะเห็นว่าใน find() เราได้ทำการส่งค่าของ primary key ออกไปเป็นแบบ array เพื่อให้ query ออกมาแบบมากกว่า 1 ค่า

ภาพประกอบ : zend framework multiple find

ภาพประกอบ : zend framework multiple find

แต่หากว่าเงื่อนไขของเราไม่ใช่การค้นหาผ่านทาง primary key แต่เป็นการใช้ where ในรูปแบบต่างๆเราก็สามารถใช้งาน where ตรงๆได้เลย โดยที่วิธีเขียนนั้นเราจะต้องกำหนดค่าลงไปให้กับ where ว่าจะให้ค้นตามเงื่นไขอะไรบ้าง

Where()

Model
public function viewSomeCountryCustomer()
{
// initial table
$oCustomerTbl = new Application_Model_DbTable_CustomerTbl();
// SQL statement
$oSelect = $oCustomerTbl->select()->where("country = ?", "Thailand");
// SQL Query
$oCustomerData = $oCustomerTbl->fetchAll($oSelect);
// Send To Controller
return $oCustomerData;
}
ภาพประกอบ : zend framework some where

ภาพประกอบ : zend framework some where

จากใน code ตัวอย่างก็คือผมทำการ เลือกข้อมูลเฉพาะในส่วนของ country ที่เป็น Thailand เท่านั้น ซึ่งการดึงค่าแบบนี้จะต้องใช้งาน fetchall นะครับ ไม่สามารถใช้งาน fetchRow ได้เนื่องจากมีค่าหลายค่า และหากเรามีค่า where มากกว่า 1 เงื่อนไข (ดูเหมือนเรื่องมาก 555 ) เราก็ยังสามารถใช้งาน where ได้อยู่เหมือนเดิมเพียงแต่เพิ่ม where ไปอีกครั้งเท่านั้น

$oSelect = $oCustomerTbl->select()
->where("country = ?", "Thailand")
->where("id <= ?", "100");

ผมทำการเพิ่มเงื่อนไขลงไปอีก 1 เงื่อนไขเพื่อให้ค้นหาลูกค้าในประเทศไทยที่มี id ไม่เกิน 100 การใช้งาน select แบบมีเงื่อนไขเบื้องต้นก็คงใช้กันประมาณนี้นะครับ ไว้เดี๋ยวเรามาต่อกันในครั้งต่อไป อีกทีดีกว่า

ขอให้สนุกกับการเขียน code นะครับ

อ้างอิง http://framework.zend.com/manual/1.12/en/zend.db.table.html

 

ต้องการต้างพัฒนาเว็บไซต์หรือระบบเว็บแอพติดต่อ teerapuch

ต้องการจ้างพัฒนาเว็บไซต์หรือระบบเว็บแอพติดต่อ teerapuch