Hallo Benjamin,
Das habe ich gerade mal ausprobiert. Leider klappt das so nicht.
Du könntest wie folgt vorgehen:
1. Schritt:
Welchen ids sind überhaupt die gesuchten Tags zugeordnet?
SELECT DISTINCT -- Gib mir die eindeutigen
i.id AS id, -- ids aus der Tabelle information
tags.tag -- und zugeordneten tags aus der Tabelle tags
FROM
information i -- wobei die Tabelle information
INNER JOIN -- mit der Tabelle
tagged t -- tagged
ON t.infoId = i.id -- über die Felder id (information) bzw. infoId
-- (tagged) verknüpft ist und die Tabelle tagged
INNER JOIN -- mit der Tabelle
tags -- tags
ON -- über die Felder tagId (tagged) und id (tags)
tags.id = t.tagId -- verknüpft ist
WHERE -- wobei mich nur die Tags aus
tags.tag IN ('keyword1', 'keyword2') -- vorgegebener Liste interessieren
2. Schritt:
Zähle, wie oft welche id vorkommt und filtere nur die aus,
die zweimal vorkommen.
SELECT
s.id -- Wähle aus dem Ergebnis obiger Abfrage, die
-- mit dem Namen s angesprochen wird, die ids
-- aus, die ...
FROM (
SELECT DISTINCT
i.id AS id,
tags.tag
FROM
information i
INNER JOIN
tagged t
ON
t.infoId = i.id
INNER JOIN
tags
ON
tags.id = t.tagId
WHERE
tags.tag IN ('keyword1', 'keyword2')
) s -- Festlegung des Aliasnamens für die Abfrage
GROUP BY
s.id
HAVING COUNT(s.id) = 2 -- ... genau zweimal vorkommen
Du kannst problemlos diese Abfrage um alle Spalten erweitern, die eindeutig
von s.id abhängen (und nach diesen Feldern gruppieren).
Freundliche Grüße
Vinzenz