• ติดตามบน
การใช้ View ในฐานข้อมูล และตัวอย่างการคำนวณอัตโนมัติ

การใช้ View ในฐานข้อมูล และตัวอย่างการคำนวณอัตโนมัติ

Chalothorn Kosakul 18 สิงหาคม 2569 6 ครั้ง

View คืออะไร?

View คือ ตารางเสมือน (Virtual Table) ที่สร้างขึ้นจากคำสั่ง SELECT โดยข้อมูลภายใน View จะอ้างอิงมาจากตารางจริงในฐานข้อมูล

จุดเด่นของ View คือช่วยลดความซับซ้อนของคำสั่ง SQL โดยเฉพาะกรณีที่ต้องเชื่อมโยงข้อมูลหลายตาราง หรือมีการคำนวณข้อมูลซ้ำ ๆ

ตัวอย่าง
ระบบขายสินค้ามีตารางสินค้าและตารางการขาย เราสามารถสร้าง View เพื่อให้ระบบแสดง ชื่อสินค้า × จำนวน × ราคา = ยอดรวม ได้อัตโนมัติ

1. สร้างฐานข้อมูลตัวอย่าง

ในตัวอย่างนี้เราจะสร้างระบบขายสินค้าแบบง่าย ๆ โดยใช้ตารางหลักจำนวน 2 ตาราง ได้แก่

  • products สำหรับเก็บข้อมูลสินค้า
  • sales สำหรับเก็บรายการขายสินค้า

ตาราง products

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    stock INT NOT NULL DEFAULT 0
);

จากคำสั่งด้านบน ตาราง products จะใช้สำหรับเก็บชื่อสินค้า ราคา และจำนวนสินค้าในสต๊อก

เพิ่มข้อมูลสินค้า

INSERT INTO products
(product_name, price, stock)
VALUES
('คีย์แคป Clicker 1 ปุ่ม', 39.00, 50),
('คีย์แคป Clicker 2 ปุ่ม', 59.00, 40),
('คีย์แคป Clicker 3 ปุ่ม', 79.00, 30);
IDสินค้าราคาStock
1Clicker 1 ปุ่ม39.0050
2Clicker 2 ปุ่ม59.0040
3Clicker 3 ปุ่ม79.0030

2. สร้างตารางการขาย

CREATE TABLE sales (
    sale_id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    sale_date DATETIME DEFAULT CURRENT_TIMESTAMP,

    FOREIGN KEY (product_id)
        REFERENCES products(product_id)
);

เพิ่มข้อมูลการขาย

INSERT INTO sales
(product_id, quantity)
VALUES
(1, 3),
(2, 2),
(3, 4);

3. สร้าง View

ต่อไปเราจะสร้าง View เพื่อรวมข้อมูลจาก products และ sales พร้อมคำนวณยอดขายต่อรายการให้อัตโนมัติ

CREATE VIEW view_sales_detail AS

SELECT
    s.sale_id,
    p.product_name,
    s.quantity,
    p.price,

    s.quantity * p.price AS total_price,

    s.sale_date

FROM sales AS s

INNER JOIN products AS p
    ON s.product_id = p.product_id;
สูตรที่ใช้ในการคำนวณ
ยอดรวม = จำนวนสินค้า × ราคาต่อหน่วย
quantity * price

4. เรียกดูข้อมูลจาก View

SELECT *
FROM view_sales_detail;

ผลลัพธ์

สินค้าจำนวนราคายอดรวม
Clicker 1 ปุ่ม339.00117.00
Clicker 2 ปุ่ม259.00118.00
Clicker 3 ปุ่ม479.00316.00

5. การคำนวณอัตโนมัติ

จุดสำคัญของ View คือเราไม่จำเป็นต้องเก็บ total_price ลงในตารางจริง เพราะสามารถคำนวณจากข้อมูลต้นทางได้

s.quantity * p.price AS total_price
จำนวน
3
ราคา
39
ยอดรวม
117 บาท

6. View สำหรับสรุปยอดขาย

View สามารถใช้งานร่วมกับฟังก์ชัน SUM() เพื่อสร้างข้อมูลสรุปได้เช่นกัน

CREATE VIEW view_product_sales_summary AS

SELECT
    p.product_id,
    p.product_name,
    p.price,

    COALESCE(SUM(s.quantity), 0)
        AS total_quantity,

    COALESCE(SUM(s.quantity * p.price), 0)
        AS total_sales

FROM products AS p

LEFT JOIN sales AS s
    ON p.product_id = s.product_id

GROUP BY
    p.product_id,
    p.product_name,
    p.price;

ในตัวอย่างนี้ใช้ COALESCE() เพิ่มเข้ามา เพื่อให้สินค้าที่ยังไม่เคยขายแสดงค่า 0 แทนค่า NULL

7. View สำหรับยอดขายทั้งหมด

CREATE VIEW view_total_sales AS

SELECT
    COALESCE(
        SUM(s.quantity * p.price),
        0
    ) AS grand_total

FROM sales AS s

INNER JOIN products AS p
    ON s.product_id = p.product_id;

เรียกดูยอดขายรวม

SELECT *
FROM view_total_sales;
ยอดขายรวม
551.00 บาท

8. ทดลองเพิ่มข้อมูลใหม่

เพิ่มการขายสินค้า ID 1 จำนวน 5 ชิ้น

INSERT INTO sales
(product_id, quantity)
VALUES
(1, 5);

ระบบจะคำนวณยอดเพิ่มจาก

5 × 39 = 195 บาท

ดังนั้นยอดขายรวมใหม่คือ

551 + 195 = 746 บาท

9. นำ View ไปใช้งานกับ PHP

PHP สามารถเรียกข้อมูลจาก View ได้เหมือนกับการอ่านข้อมูลจาก Table ทั่วไป

<?php

$conn = new mysqli(
    "localhost",
    "root",
    "",
    "shop_db"
);

$conn->set_charset("utf8mb4");

$sql = "
    SELECT *
    FROM view_sales_detail
    ORDER BY sale_id DESC
";

$result = $conn->query($sql);

while ($row = $result->fetch_assoc()) {

    echo "<div class='sale-item'>";

    echo "<strong>"
        . htmlspecialchars($row['product_name'])
        . "</strong><br>";

    echo "จำนวน: "
        . number_format($row['quantity'])
        . " ชิ้น<br>";

    echo "ราคา: "
        . number_format($row['price'], 2)
        . " บาท<br>";

    echo "ยอดรวม: <strong>"
        . number_format($row['total_price'], 2)
        . " บาท</strong>";

    echo "</div>";
}

?>

10. แสดงยอดขายบน Dashboard

<?php

$sql = "
    SELECT grand_total
    FROM view_total_sales
";

$result = $conn->query($sql);

$row = $result->fetch_assoc();

$grandTotal = $row['grand_total'];

?>

<div class="dashboard-card">

    <div class="dashboard-title">
        ยอดขายทั้งหมด
    </div>

    <div class="dashboard-value">

        <?=
            number_format(
                $grandTotal,
                2
            );
        ?>

        บาท

    </div>

</div>
ข้อควรเข้าใจ

View ไม่เหมือน Trigger เพราะ View ไม่ได้ทำงานทันทีตอน INSERT หรือ UPDATE แต่ระบบจะนำคำสั่งภายใน View มาประมวลผลเมื่อมีการเรียกข้อมูลจาก View

View กับ Trigger ต่างกันอย่างไร?

หัวข้อViewTrigger
ลักษณะตารางเสมือนชุดคำสั่งอัตโนมัติ
ทำงานเมื่อSELECT ข้อมูลINSERT / UPDATE / DELETE
เหมาะกับแสดงผล / รายงาน / คำนวณทำงานอัตโนมัติเมื่อข้อมูลเปลี่ยน

สรุป

View เป็นเครื่องมือที่ช่วยให้การจัดการข้อมูลในฐานข้อมูล มีความสะดวกและเป็นระบบมากขึ้น โดยเฉพาะการดึงข้อมูลจากหลายตารางและการคำนวณข้อมูล

คำนวณยอดต่อรายการ

quantity * price

หาจำนวนรวม

SUM(quantity)

หายอดขายรวม

SUM(quantity * price)
แนวคิดสำคัญ

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


แชร์บทความนี้