znalezienie artykułów z żadnym z kompletem metek jest stosunkowo prosta dołączyć, i został omówiony już: Best DB (MySQL) structure: Articles which contain favored tagsSQL, aby znaleźć artykuły z całym kompletem metek
ale co jeśli ja szukam i chce znaleźć artykuły z ALL z zestawem tagów?
Do specyfiki załóżmy poniższych tabelach:
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
);
wpadłem na to, co myślę, że może pracować, ale to ogromny, brzydki, i trochę niejasne, więc postać nie musi być lepszy sposób :
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>)
(Zasadniczo, jeśli policzyć ilość odpowiednich znaczników jest wartość oczekiwana.)
Dzięki, to jest o wiele bardziej eleganckie. Myślę, że mogę nieco przyspieszyć, wykonując "from" (wybierz id_artykulu z applied_tags, gdzie tag_id ==) ". I tak, faktycznie mam unikalne indeksy dla obu (tag_id, article_id) i (article_id, tag_id). –
me22