ความสัมพันธ์ของระบบ Tag และ Category () ใน WordPress จะถูกแยกออกเป็นหลายตารางเพื่อความยืดหยุ่นในการขยายข้อมูลครับ โดยมี 3 ตารางหลักที่เป็นหัวใจสำคัญ ดังนี้
wp_terms
ตารางนี้เปรียบเสมือน “พจนานุกรม” ที่เก็บแค่ชื่อเรียกและ URL เท่านั้น มันจะไม่รู้เลยว่าตัวเองเป็น Tag, Category หรืออย่างอื่น
- Key Column:
term_id - Data: เก็บชื่อ เช่น ‘Security’, ‘SQL’, ‘ฉีด’
wp_term_taxonomy
ตารางนี้จะนำ term_id มาบอกว่า “มันคืออะไร” และเก็บสถิติว่ามีกี่โพสต์ที่ใช้คำนี้
- Key Column:
term_taxonomy_id,term_id - Data: บอกว่า
term_idหมายเลข 10 คือpost_tagและมีคนใช้แล้ว 5 ครั้ง
wp_posts
ตารางที่เก็บเนื้อหาบทความ หน้าเพจ หรือสินค้าของคุณ
- Key Column:
ID - Data: ชื่อเรื่องบทความ, เนื้อหา, วันที่เขียน
ตารางที่เชื่อมทุกอย่างเข้าด้วยกัน: wp_term_relationships
เนื่องจาก 1 โพสต์ มีได้หลาย Tag และ 1 Tag ก็ใช้กับหลายโพสต์ 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 |
สรุปไหลการทำงาน
ถ้าคุณต้องการหาว่า “โพสต์ 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 คู่กันเสมอ เพื่อให้ระบบความสัมพันธ์นี้ทำงานได้สมบูรณ์ครับ
อ่านเพิ่มเติม