Я пытаюсь создать систему тегов для выбора товаров из базы данных. Я читал, что лучший способ добиться этого - через отношение многие ко многим, так как использование LIKE '% tag%' замедлится при большом количестве записей. Я также прочитал этот вопрос, где для совпадения по нескольким тегам необходимо выполнить объединение для каждого запрашиваемого тега.
У меня есть 3 таблицы: shop_products, shop_categories и shop_products_categories. И мне нужно, например, быть в состоянии найти товары, которые имеют теги «цветы» и «романтика».
SELECT p.sku, p.name, p.path FROM shop_products p
LEFT JOIN shop_products_categories pc1 ON p.sku = pc1.product_sku
LEFT JOIN shop_categories c1 ON pc1.category_id = c1.id
LEFT JOIN shop_products_categories pc2 ON p.sku = pc2.product_sku
LEFT JOIN shop_categories c2 ON pc2.category_id = c2.id
WHERE c1.path = 'flowers' AND c2.path = 'romance'
Это демонстрационный запрос, который я сейчас создаю, чтобы проверить, работает ли он, прежде чем кодировать соответствующий PHP для него, и он работает. Но действительно ли это лучший способ сделать это? Мне трудно поверить, что нет лучшего способа сделать это, чем сделать объединение для каждого искомого тега.
Спасибо за любой совет. :)