เทคนิคการ Query ข้อมูลล่าสุดของแต่ละกลุ่ม

จากข้อมูลตัวอย่าง มี owner_id หลายรายการที่ไม่ซ้ำกัน และแต่ละ owner_id ก็มีข้อมูล id อีกหลายรายการด้วยกัน โดยที่ในแต่ละ owner_id จะมี id ไม่ซ้ำกัน โจทย์ต้องการหา id ล่าสุดของแต่ละ owner_id
สามารถเขียนคำสั่ง SQL ได้ดังนี้
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);
0SHAREFacebookLINE it!