n'abend,
Wenn ich nun in der Spalte "tag" nach "hund" und "maus" suche möchte ich als Ergebnis die ID 1 bekommen, da "hund" und "maus" eben nur bei ID 1 vorkommt.
Da gibt es wohl mehrere Möglichkeiten diese Aufgabenstellung zu lösen. Es kommt aber drauf an welches DBMS in welcher Version du benutzt. Nicht alle Datenbanken können mit allen Anfragearten umgehen.
Ich schicke folgendes Statement an MySQL:
Und welche MySQL-Version?
SELECT *
FROM tags
WHERE tag = 'hund' AND tag = 'maus'
Dass das *niemals* überhaupt auch nur einen einzigen Datensatz finden kann, ist dir klar, oder? Ähnlich wie ein (unifarbenes) Auto exakt eine Farbe hat, hat ein Datenfeld auch nur einen einzigen Wert. Wieviele einfarbige Autos findest du denn, wenn du nur Autos haben möchtest, die rot und grün sind? richtig! Das geht gar nicht, da wir ja vorher festgestellt haben, dass ein Auto einfarbig ist, also exakt _eine_ Farbe hat. Genau das ist auch bei deinem Datenfeld der Fall.
Aber ich bekomme leider kein Ergebnis (0). Ersetze ich AND durch OR kommt es zum einen Ergebnis. Ich möchte allerdings nicht die ID haben wo "hund" oder "maus" vorkommt, sondern eben nur die ID wenn beide Wörter bei der selben ID kommt.
Das einfachste (und zugleich schlechteste) Beispiel, das mir einfällt, welches auf jedem Datenbanksystem gleichermaßen laufen sollte ist das Kartesische Produkt der Tabelle bilden:
SELECT a.id
FROM deineTabelle a,
deineTabelle b
WHERE a.tag = 'Hund'
AND b.tag = 'Maus';
Dieses Vorgehen ist für große Datenmengen und oder eine hohe Anzahl Abfragen jedoch wirklich *nicht* empfehlenswert.
Benutzt du MySQL 4.1 (oder höher), stehen dir SubQueries (verschachtelte Anfragen) zur Verfügung. Dann könntest du etwas wie das folgende basteln:
SELECT id
FROM deineTabelle
WHERE tag = 'Hund'
AND id IN (
SELECT id
FROM deineTabelle
WHERE tag = 'Maus'
);
Die Subquery-Variante hat den Vorteil, dass sie um ein vielfaches schneller verarbeitet werden kann, als die "Kartesisches Produkt"-Variante. Allerdings ist diese Anfrage auch nur dann brauchbar, wenn du nicht mehr als 2 gleichzeitige Werte abfragen möchtest.
Möchtest du unbegrenzt viele Werte abfragen können, ist ein Beispiel wie das folgende denkbar:
SELECT id
FROM deineTabelle
WHERE tag IN ('Hund', 'Katze', 'Maus', 'Marsupilami')
GROUP BY id
HAVING COUNT(*) = 4;
Wobei die Zahl 4 in der letzten Zeile die Anzahl der möglichen Werte von tag sein muss.
(Natürlich sind diese Anfragen nicht getestet...)
weiterhin schönen abend...
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|