Tengo 3 tablas: productos, categorías y pro_cat_link. Un producto puede vincularse a una o más categorías a través de la tabla pro_cat_link.Consulta SQL para encontrar productos que coincidan con un conjunto de categorías
Mi consulta debe responder al siguiente problema: encuentre todos los productos que coincidan con un conjunto de categorías. Ej .: encuentre todos los productos que sean "amarillos Y frutales Y dulces".
Al investigar este problema en tanto que pude encontrar sólo la solución de lo que estoy usando actualmente: Complicated SQL Query--finding items matching multiple different foreign keys
En mi caso, mi consulta es la siguiente:
SELECT products.id, COUNT(DISTINCT categories.id) as countCat
FROM products
INNER JOIN pro_cat_link ON (pro_cat_link.product_id = products.id)
WHERE pro_cat_link.category_id IN (3,6,8,10)
GROUP BY product.id
ORDER BY product.date DESC
HAVING countCat = 4
En otras palabras, seleccione todos los productos que coincidan con uno de los identificadores de categoría (3,6,8,10) y conserve solo aquellos que tienen exactamente 4 categorías coincidentes.
Esto funciona bien, pero estoy teniendo problemas de rendimiento ya que el COUNT(), GROUP BY, ORDER BY hace que la indexación sea muy limitada. ¿Alguien puede pensar en una mejor manera de resolver ese problema?
Supongo que simplemente hacer una unión para cada categoría lleva demasiado tiempo? – Jodaka
@Jodaka Sí. Los chicos de administración requieren que un usuario pueda elegir tantas categorías como quiera;) – Tchoupi