Tags in Datenbank durchsuchen
Ralf
- datenbank
Dieser Thread knüpft an folgendes Thema an: http://forum.de.selfhtml.org/?t=174217&m=1144254&readmode=nested
Es geht um MySQL & PHP.
Ich habe drei Tabellen:
1. Links: In dieser Tabelle stehen Links zu Webseiten.
2. Tags: In dieser Tabelle stehen Tags für die Webseiten
3. Tagged: In dieser Tabelle stehen eine ID von der Links-Tabelle und eine ID von der Tags-Tabelle. Mit dieser Tabelle werden die Links mit den Tags verbunden.
Nun möchte ich, dass jemand in ein Suchfeld verschiedene Tags eingeben kann und dann alle Links ausgegeben bekommt, die mit ALLEN angegebenen Tags verbunden sind.
Nun ist die Frage, ob das überhaupt mit einer SQL-Abfrage machbar ist? Oder muss ich für jeden Tag alle Links abholen und dann mit PHP die Schnittmenge errechnen? Das erscheint mir sehr aufwändig. Eine einfache Abfrage wäre sicherlich ressourcenschonender. Wie machen das denn zum Beispiel Social Bookmark Portale wie Mister-Wong & Co? Die können ja genau das.
MfG!
Mahlzeit Ralf,
Nun möchte ich, dass jemand in ein Suchfeld verschiedene Tags eingeben kann und dann alle Links ausgegeben bekommt, die mit ALLEN angegebenen Tags verbunden sind.
Funktioniert das vielleicht mit sowas ähnlichem:
SELECT DISTINCT Links.id
FROM Links
JOIN Tagged ON Links.id = Tagged.links_id
JOIN Tag ON Tagged.tag_id = Tag.id
WHERE Tag.keyword IN ('foo', 'bar')
Nun ist die Frage, ob das überhaupt mit einer SQL-Abfrage machbar ist?
Müsste gehen - wenn nicht wie oben, dann sicherlich mit Subqueries.
MfG,
EKKi
Mahlzeit Ralf,
Nun möchte ich, dass jemand in ein Suchfeld verschiedene Tags eingeben kann und dann alle Links ausgegeben bekommt, die mit ALLEN angegebenen Tags verbunden sind.
Funktioniert das vielleicht mit sowas ähnlichem:
SELECT DISTINCT Links.id
FROM Links
JOIN Tagged ON Links.id = Tagged.links_id
JOIN Tag ON Tagged.tag_id = Tag.id
WHERE Tag.keyword IN ('foo', 'bar')
>
>
> > Nun ist die Frage, ob das überhaupt mit einer SQL-Abfrage machbar ist?
>
> Müsste gehen - wenn nicht wie oben, dann sicherlich mit Subqueries.
Genau so hab ich das bis nun. Das Problem ist, dass SQL mir bei IN alle Links zurück gibt, die mit MINDESTENS EINEM der beiden Tags verbunden ist. Ich möchte jedoch nur Links haben, die mit ALLEN Tags verbunden sind.
yo,
Nun ist die Frage, ob das überhaupt mit einer SQL-Abfrage machbar ist?
jein, es geht, wenn du die eine abfrage generisch zusammensetzt, zum beispiel für jeden tag eine weitere bedingung in form einer subquery in der where klausel hinzufügst oder aber einen weiteren join bildest, mengenoperatoren würden sich hier auch anbieten.....
aber wie auch immer, die abfrage sollte wohl generisch erstellst werden.
Ilja