ความสัมพันธ์ของระบบ Tag ( ป้ายกำกับ ) และ Category () ใน WordPress ( เรียกโดยรวมว่า Taxonomies ) จะถูกแยกออกเป็นหลายตารางเพื่อความยืดหยุ่นในการขยายข้อมูลครับ โดยมี 3 ตารางหลักที่เป็นหัวใจสำคัญ ดังนี้
wp_terms ( คลังชื่อ )
ตารางนี้เปรียบเสมือน “พจนานุกรม” ที่เก็บแค่ชื่อเรียกและ URL ( Slug ) เท่านั้น มันจะไม่รู้เลยว่าตัวเองเป็น Tag, Category หรืออย่างอื่น
- Key Column:
term_id( Primary Key ) - Data: เก็บชื่อ เช่น ‘Security’, ‘SQL’, ‘ฉีด’
wp_term_taxonomy ( ตัวกำหนดประเภท )
ตารางนี้จะนำ term_id มาบอกว่า “มันคืออะไร” ( เช่น เป็น Tag หรือ Category ) และเก็บสถิติว่ามีกี่โพสต์ที่ใช้คำนี้
- Key Column:
term_taxonomy_id( Primary Key ),term_id( Foreign Key ) - Data: บอกว่า
term_idหมายเลข 10 คือpost_tagและมีคนใช้แล้ว 5 ครั้ง (count)
wp_posts ( เนื้อหาหลัก )
ตารางที่เก็บเนื้อหาบทความ หน้าเพจ หรือสินค้าของคุณ
- Key Column:
ID( Primary Key ) - Data: ชื่อเรื่องบทความ, เนื้อหา, วันที่เขียน
ตารางที่เชื่อมทุกอย่างเข้าด้วยกัน: wp_term_relationships
เนื่องจาก 1 โพสต์ มีได้หลาย Tag และ 1 Tag ก็ใช้กับหลายโพสต์ ( Many-to-Many ) WordPress จึงต้องมีตารางกลางมาจับคู่ครับ
| ตาราง | ความสัมพันธ์ | เชื่อมด้วยคอลัมน์ |
| terms ↔ term_taxonomy | One-to-One / One-to-Many | term_id |
| term_taxonomy ↔ term_relationships | One-to-Many | term_taxonomy_id |
| posts ↔ term_relationships | One-to-Many | object_id ( คือ Post ID ) |
สรุปไหลการทำงาน ( Workflow )
ถ้าคุณต้องการหาว่า “โพสต์ ID 50 มี Tag อะไรบ้าง?” ระบบจะทำงานตามลำดับนี้
- ไปที่
wp_term_relationshipsหาแถวที่มีobject_id = 50 - ดูว่าแถวนั้นมี
term_taxonomy_idเลขอะไรบ้าง - เอาเลขนั้นไปเช็คใน
wp_term_taxonomyเพื่อยืนยันว่าเป็นpost_tag - สุดท้ายเอา
term_idไปดึงชื่อ ‘ชื่อแท็ก’ จากwp_termsมาแสดงผล
เทคนิคการ Query
เวลาคุณเขียน SQL เพื่อเพิ่ม Tag คุณจึงต้อง INSERT ลงทั้ง terms ( สร้างชื่อ ) และ term_taxonomy ( สร้างประเภท ) คู่กันเสมอ เพื่อให้ระบบความสัมพันธ์นี้ทำงานได้สมบูรณ์ครับ
อ่านเพิ่มเติม