MYSQL איחוד תוצאות וחיפוש בתוך התוצאות המאוחדות
-
טבלת המוצרים
+-------------+------- | id | title | cost | +-----+------------+--
טבלת התגים
+-------------+------------- | id | tag_name | item_id | +-----+------------+--------
העמודה item_id זה מפתח זר של המוצר, לכל מוצר יש כמה תגיות.
אם אני רוצה לשלוף מוצר עם כל התגיות שלו, אני עושה JOIN
SELECT items.*, GROUP_CONCAT(items_tags.name, ',') as tags FROM items LEFT JOIN items_tags ON items_tags.item_id = items.id WHERE items.id = 55 GROUP BY items.id
ומקבל את כל התגיות תחת השדה tags
הבעיה מתחילה אם אני רוצה לשלוף כל מוצר שמכיל את תגית מסויימת
אם אני עושה כךSELECT items.*, GROUP_CONCAT(items_tags.name, ',') as tags FROM items LEFT JOIN items_tags ON items_tags.item_id = items.id WHERE items.tags = 'computer' GROUP BY items.id
זה שולף את כל המוצרים, אבל זה לא מביא את כל התגיות שלהם, זה מחזיר רק את התגית computer בגלל ה WHERE
אבל אני רוצה שרק הסינון יתבצע לפי התגית, ושיחזיר לי את כל התגיות שמשוייכות למוצר
איך עושים את זה? -
SELECT items.*, GROUP_CONCAT(items_tags.name, ',') as tags FROM items LEFT JOIN items_tags ON items_tags.item_id = items.id WHERE items.id IN (select t.item_id from items_tags as t where t.name='computer') GROUP BY items.id