เทคนิคการ Query ข้อมูลล่าสุดของแต่ละกลุ่ม
จากข้อมูลตัวอย่าง มี owner_id หลายรายการที่ไม่ซ้ำกัน และแต่ละ owner_id ก็มีข้อมูล id อีกหลายรายการด้วยกัน โดยที่ในแต่ละ owner_id จะมี id ไม่ซ้ำกัน โจทย์ต้องการหา id ล่าสุดของแต่ละ owner_id
สามารถเขียนคำสั่ง SQL ได้ดังนี้
ผลลัพท์ที่ได้ ในกรณีที่ต้องการผลลัพท์ที่ id แรกสุด (น้อยที่สุด) สามารถเปลี่ยนจาก MAX เป็น MIN ได้
หากจะเขียนในรูปแบบ Model ของ Kotchasan จะได้ดังนี้
SELECT `owner_id`,`id`,`create_date`
FROM `gcms_plus`.`demo` AS Q
WHERE `id` = (
SELECT MAX(`id`)
FROM `gcms_plus`.`demo`
WHERE `owner_id` = Q.`owner_id`
)
ผลลัพท์ที่ได้ ในกรณีที่ต้องการผลลัพท์ที่ id แรกสุด (น้อยที่สุด) สามารถเปลี่ยนจาก MAX เป็น MIN ได้
หากจะเขียนในรูปแบบ Model ของ Kotchasan จะได้ดังนี้
// sub query
$q1 = $model->db()->createQuery()
// SELECT MAX(id) หรือ MIN(id)
->select(\Kotchasan\Database\Sql::MAX('id'))
// FROM demo
->from('demo')
// WHERE owner_id=Q.owner_id
->where(array('owner_id', 'Q.owner_id'));
// query หลัก
$result = $model->db()->createQuery()
// SELECT owner_id, id, create_date
->select('owner_id', 'id', 'create_date')
// FROM demo AS Q
->from('demo Q')
// WHERE id = (sub query)
->where(array('id', $q1))
// ประมวลผลคำสั่ง SQL
->execute();
// แสดงผลลัพท์
print_r($result);