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
אבל אני רוצה שרק הסינון יתבצע לפי התגית, ושיחזיר לי את כל התגיות שמשוייכות למוצר
איך עושים את זה? -
טבלת המוצרים
+-------------+------- | 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@ארכיטקט תודה!
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות