ฉันกำลังค้นหาวิธีในการสร้างแบบสอบถามเพื่อทำสิ่งต่อไปนี้:
ลองพิจารณา 3 ตาราง:
- ผลิตภัณฑ์: รายชื่อผลิตภัณฑ์
- แท็ก: รายการของแท็ก
- tag_ties: ตารางที่ใช้เชื่อมโยงแท็กกับผลิตภัณฑ์
ลองพิจารณาโครงสร้างนี้สำหรับแต่ละตาราง:
ผลิตภัณฑ์:
- id (int, autoincrement)
- ชื่อ (varchar ชื่อของผลิตภัณฑ์)
Tags:
- id (การสร้างอัตโนมัติภายใน)
- ป้ายกำกับ (varchar ป้ายกำกับของแท็ก)
Tag_ties:
- id (int, autoincrement)
- tag_id (int หมายถึง id แท็ก)
- ref_id (int หมายถึงรหัสผลิตภัณฑ์)
สิ่งที่ฉันต้องการ:
รับผลิตภัณฑ์ทั้งหมดที่ติดแท็กด้วยแท็ก id 10, 11 และ 12 เช่น
แบบสอบถามนี้ไม่ทำงานเนื่องจากจะส่งคืนผลิตภัณฑ์ที่มีแท็กอย่างน้อยหนึ่งรายการ:
select
p.name as name,
p.id as id
from
products p inner join tag_ties ties
on
p.id=ties.ref_id
where
ties.ref_id=p.id and
ties.tag_id in (10,11,12)
group by
p.id
order by
p.name asc