Я пытаюсь сделать систему тегов для выбора продуктов из базы данных. Я прочитал, что лучший способ достичь этого - через отношения «многие ко многим», поскольку использование LIKE «% tag%» будет медленным, когда будет много записей. Я также прочитал вопрос this, где нужно сопоставлять несколько тегов, которые вы должны сделать для каждого запрашиваемого тега.Выберите строки с несколькими тегами ... есть ли лучший способ?
У меня есть 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 для него, и он работает. Но действительно ли это лучший способ сделать это? Мне трудно поверить, что нет лучшего способа сделать это, чем сделать соединение для каждого найденного тега. Спасибо за любой совет. :)
Спасибо, что работали великолепно. :) – Fourjays