encontrar artículos con cualquiera de un conjunto de etiquetas es relativamente una combinación sencilla, y ya ha sido discutido: Best DB (MySQL) structure: Articles which contain favored tagsSQL para encontrar artículos con LLA de un conjunto de etiquetas
Pero lo que si que estoy buscando, y quieren para encontrar artículos con TODO un conjunto de etiquetas?
Para especificidad, asumirá las siguientes tablas:
CREATE TABLE `articles` (
`id` INT NOT NULL
);
CREATE TABLE `applied_tags` (
`tag_id` INT NOT NULL,
`article_id` INT NOT NULL
);
CREATE TABLE `search_tags` (
`search_id` INT NOT NULL,
`tag_id` TAG NOT NULL
);
me ocurrió esto, que creo que podría funcionar, pero es enorme, feo y poco clara, por lo que figura que debe haber una manera mejor :
Select articles.id from articles
where
(select count(*) from applied_tags
where applied_tags.article_id == articles.id
and applied_tags.tag_id in (select search_tags.tag_id from search_tags where search_tags.search_id == <input>)
==
(select count(*) from search_tags where search_tags.search_id == <input>)
(Esencialmente, cuentan si el número de etiquetas relevantes es el valor esperado.)
Gracias, eso es mucho más elegante. Creo que puedo acelerarlo un poco al hacer "de (seleccione article_id from applied_tags where tag_id ==)" también. Y sí, en realidad tengo índices únicos para ambos (tag_id, article_id) y (article_id, tag_id). –
me22