ChrisB: Unterabfragen als Filter

Beitrag lesen

Hi,

Ich möchte gern die Möglichkeit haben, die Bilder zu filtern und zwar indem ich die tags(per PHP) angebe. Nun will ich, dass schon bei der mySQL Abfrage nur Ergebnisse erscheinen, die jeden angegeben Tag besitzen.

$result = mysql_query("
  SELECT
    picture_id
  FROM
    picture_tag
  WHERE
    tag_id IN (SELECT id FROM tags WHERE name = 'abc')
");

benutze ich um nur Bilder zu laden, die auch den Tag abc enthalten. Jetzt möchte ich aber beliebig viele Tags dazu addieren.
Der Zusatz
AND tag_id IN (SELECT id FROM tags WHERE name = 'def')
funktioniert leider nicht.

Natürlich nicht - denn das müsste ja letztendlich einen Datensatz finden, in dem tag_id sowohl gleich der tag_id von 'abc' als auch der von 'def' ist.

Du willst daraus, dass sich *mehrere* Datensätze (zu einer picture_id) in der durch Bedingungen entsprechend eingeschränkten (Unter-)Ergebnismenge befinden, einen Schluss ziehen.

Zählen geht mit COUNT, und HAVING erlaubt die zurückgelieferten Datensätze nach Auswertung der WHERE-Klausel, aber vor der Lieferung des eigentlichen Ergebnisses noch mal einzuschränken. Einschränken willst du hier auf die, bei denen die Zählung (mindestens) die Anzahl der in der WHERE-Klausel angegebenenen IDs ergeben hat.

MfG ChrisB

--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]