PlusMagi's Blog By Pitt Phunsanit Database PHPExcel : กำหนด border

PHPExcel : กำหนด border

ในโลกของการจัดการข้อมูล การนำเสนอข้อมูลที่ชัดเจนและมีขอบเขตที่กำหนดไว้อย่างดี (Data Boundaries) เป็นสิ่งสำคัญอย่างยิ่ง ไม่ว่าจะเป็นการรายงานผลทางธุรกิจ หรือการแสดงผลในแอปพลิเคชัน การที่ข้อมูลดูเป็นระเบียบและแยกส่วนกันอย่างชัดเจนจะช่วยให้ผู้ใช้งานสามารถตีความข้อมูลได้อย่างถูกต้องและรวดเร็ว

แม้ว่าหัวข้อตั้งต้นจะเกี่ยวข้องกับ PHPExcel แต่ในบริบทของระบบฐานข้อมูลระดับ Senior Architect อย่าง PostgreSQL เราไม่ได้ใช้คำสั่ง ‘border’ ในเชิงของไลบรารี แต่เราใช้พลังของภาษา SQL และฟังก์ชันการจัดการข้อมูลเพื่อ ‘จำลอง’ หรือ ‘กำหนดขอบเขต’ ของข้อมูลให้ปรากฏอย่างชัดเจนในผลลัพธ์ (Result Set) ซึ่งเป็นแนวทางที่ทรงพลังกว่าและยืดหยุ่นกว่ามาก

💡 หลักการกำหนดขอบเขตข้อมูลด้วย PostgreSQL

ใน PostgreSQL เราไม่สามารถใช้คำสั่ง `BORDER` โดยตรงเหมือนการทำงานกับไฟล์ Excel แต่เราสามารถใช้เทคนิคขั้นสูงทาง SQL เช่น การใช้ฟังก์ชัน Window Functions (เช่น `ROW_NUMBER()`) ร่วมกับคำสั่ง `CASE` statement หรือการใช้ `CONCAT()` เพื่อสร้างแถวข้อมูล (Row) หรือคอลัมน์ (Column) ที่ทำหน้าที่เป็นตัวแบ่งขอบเขต (Delimiter) ได้อย่างสมบูรณ์แบบ

เทคนิคนี้เหมาะสำหรับการสร้างรายงาน (Report Generation) ที่ต้องการการจัดรูปแบบที่ซับซ้อนในระดับฐานข้อมูล ก่อนที่จะส่งผลลัพธ์ไปให้ Application Layer ดำเนินการแสดงผลต่อไป

⚙️ ตัวอย่างการใช้งาน PostgreSQL เพื่อจำลองขอบเขตข้อมูล

สมมติว่าเรามีข้อมูลรายการสินค้า และต้องการให้ผลลัพธ์ที่ได้มีแถวหัวข้อและแถวสรุปที่ชัดเจนเหมือนการมีขอบเขตล้อมรอบ:

SQL

-- 1. สร้างข้อมูลจำลอง (CTE) เพื่อให้ง่ายต่อการจัดการแถวลำดับที่
WITH data_items AS (
    SELECT 'apple' AS item_name, 100 AS quantity, 20.00 AS price
    UNION ALL
    SELECT 'banana' AS item_name, 50, 15.00
    UNION ALL
    SELECT 'orange' AS item_name, 80, 10.00
)
-- 2. ใช้ SELECT และ CASE statement เพื่อสร้างแถวขอบเขต
SELECT
    CASE WHEN row_num = 1 THEN '========================================' ELSE NULL END AS border_top,
    item_name,
    item_value,
    CASE WHEN row_num = 3 THEN '========================================' ELSE NULL END AS border_bottom
FROM (
    SELECT
        item_name,
        item_value,
        ROW_NUMBER() OVER (ORDER BY item_name) AS row_num
    FROM data_items
)
ORDER BY row_num;

คำอธิบายโค้ด:

  • WITH data_items AS (...): ส่วนนี้ทำหน้าที่รวบรวมข้อมูลดิบ (Raw Data)
  • ROW_NUMBER() OVER (...): เป็น Window Function ที่ช่วยกำหนดลำดับให้กับแต่ละแถวข้อมูล
  • CASE WHEN row_num = 1 THEN '...' ELSE NULL END: คือหัวใจสำคัญในการสร้างขอบเขต โดยการตรวจสอบว่าแถวปัจจุบันคือแถวที่ 1 และแถวที่ 3 (หรือแถวใดๆ ที่เราต้องการให้เป็นขอบเขต) ถ้าใช่ จะใส่สตริงขีดคั่นเข้าไป มิฉะนั้นจะใส่ค่า NULL ทำให้แถวอื่นไม่มีการแสดงผลขอบเขต

✅ บทสรุป (Conclusion)

การกำหนดขอบเขตข้อมูลใน PostgreSQL ไม่ได้หมายถึงการใช้คำสั่ง CSS หรือ Border อย่างที่พบใน GUI แต่คือการใช้ความสามารถของภาษา SQL ในการจัดการโครงสร้างข้อมูล (Data Structure) และการนำเสนอ (Presentation) ผ่านการคำนวณเชิงตรรกะ (Logical Calculation) ด้วยฟังก์ชันขั้นสูงอย่าง `CASE` และ Window Functions

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