PHP Array การออกแบบฐานข้อมูลและเขียนโปรแกรมแสดงหมวดหมู่สินค้า แบบมีหมวดหมู่ย่อยไม่จำกัด

โดย SONGCHAI SAETERN

ดูวิธีการใช้งานแบบเต็มๆที่ PHP กับจัดการฐานข้อมูลหมวดหมู่สินค้า MySQL แบบใช้ตารางเพียงตารางเดียวเท่านั้น 

 

1. สร้างตารางเก็บข้อมูลหมวดหมู่สินค้า

    ส่วนที่สำคัญก็คือ การเพิ่มฟิลด์เพื่อใช้สำหรับอ้างอิงหมวดหมู่หลักของรายการนั้นๆ

ตาราง tb_category
1. id               รหัส primary key
2. name         ชื่อหมวดหมู่
3. parent_id    รหัสของหมวดหมู่หลัก (ถ้าไม่มีให้ใส่ 0)

2. ออกแบบ Array สำหรับเก็บข้อมูลที่ Query จากฐานข้อมูล

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

2.1 หาหมวดหมู่หลัก WHERE parent_id = 0
2.2 ใน While Loop ให้หาหมวดหมู่ย่อยของแต่ละรายการด้วย WHERE parent_id = id

จากรูปแบบข้อมูลของ category ในความเป็นจริงก็คือ เราต้องการทุกรายการอยู่แล้ว และหากเป็นการ Query ซ้อน Query ก็จะทำให้ MySQL ต้องทำงานหนัก ลองนึกภาพถ้าหมวดหมู่หลัก 1 หัวข้อ มีหมวดหมู่ย่อยของหมวดย่อยโดยเฉลี่ย 3 ชั้น ก็จะเท่ากับต้องคิวรี่ 4 ครั้งในแต่ละหมวด

ดังนั้น ถ้ามี 10 หมวดหลัก ก็เท่ากับว่าต้องคิวรี่ 40 ครั้งจึงจะได้ข้อมูลครบถ้วน

งั้นเรามาลดการทำงานของ MySQL ด้วยการ Query ครั้งเดียวแล้วยัดมันเข้าไปใน Array กันดีกว่า

while($row=ดึงข้อมูลแต่ละเรคอร์ด){
    $category[ไอดี] = $row;
}

ตอนนี้เรามี $category ที่เก็บข้อมูลครบถ้วนแล้ว

แต่สิ่งที่เราต้องการคือข้อมูลที่แยกหมวดหมู่แล้วนะ งั้นก็มาดูกันหน่อยว่า รายการไหนเป็นหมวดย่อยบ้าง และก็จัดการสร้างคีย์ "sub" ให้กับรายการนั้นๆที่เป็นหมวดหลักของเราไปเลย

while($row=ดึงข้อมูลแต่ละเรคอร์ด){
     if($row['parent_id'] > 0){
          $category[$row['parent_id']]["sub"][] = $row;
     }else{
          $category[$row['id']] = $row
     }
}

แค่นี้รายการต่างๆก็อยู่เข้าที่เข้าทางเรียบร้อย ที่เหลือก็คือการ วนลูปแสดงมันออกมา

 แต่เราต้องสร้างฟังก์ชั่นในการแสดงข้อมูลรอไว้ก่อนนะ เพระถ้ารายการไหนเป็น sub เราจำเป็นต้องส่งเข้าฟังก์เดิมอีกครั้งไปเรื่อยๆ รู้สึกว่าเขาจะเรียกว่า RECURSIVE Function

function displayCategory($data){
    echo '<hr>';
    echo '<pre>';
    print_r($data);
    echo '</pre>';
    if(isset($data['sub']){
        displayCategory($data['sub']);   //RECURSIVE Function
    }
}

foreach($category as $id=>$row){
    displayCategory($row);
}

 ที่จะแนะนำทั้งหมดก็มีแค่นี้แหละ แต่ถ้าสงสัยหรือรันแล้ว Error เราจะเจอกันใหม่อีกครั้งนะ ^^"
สำหรับวิดีโอสาธิตขั้นตอนการเขียนโค้ดและแสดงผลแบบทีละสเต็ปเอาไว้จะอัพเดตอีกที

ดูวิธีการใช้งานแบบเต็มๆที่ PHP กับจัดการฐานข้อมูลหมวดหมู่สินค้า MySQL แบบใช้ตารางเพียงตารางเดียวเท่านั้น




PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/