AND Verknüpfung bei 2 Tabellen

7cookies

Neuer Benutzer
Beiträge
2
Hallo,

ich bin wohl in eine Sackgasse gelaufen. Mir fehlt leider die Phantasie, die richtigen Suchbegriffe zu finden. Warscheinlich sehe ich den Wald vor lauter Bäumen gerade nicht.

Ich habe 2 Tabellen:
tabelle artikel:
artikel.id (PRIMÄRSCHLÜSSEL)
artikel.name

tabelle attribute:
attribute.id (PRIMÄRSCHLÜSSEL)
attribute.text
attribute.artikelid (Schlüssel des Artikels)

Inhalt Artikel:
1 | Testartikel
2 | Neuer Artikel
3 | Mein Artikel

Nun gibt es 2 Attribute:
1 | Hipp | 1
2 | Hopp | 1


Nun läuft die Suche so weit toll:
Suche nach "Hipp Hopp" (oder Verknüpfung):

select artikel.id from artikel, attribute where (attribute.text like "Hipp" or attribute.text like "Hopp") and attribute.artikelid = artikel.id group by artikel.id

Ergebnis:
Es wird Artikel 1 gefunden. So weit super!

Nun versuche ich die UND-Verknüpfung und scheitere kläglich:

select artikel.id from artikel, attribute where (attribute.text like "Hipp" and attribute.text like "Hopp") and attribute.artikelid = artikel.id group by artikel.id

Das ergibt 0 Treffer und kann ja auch nicht funktionieren, weil ein Attribut ja nicht auf beides zutreffen kann.

Bleibt hier nur ein subselect oder gibt es noch eine andere Form?

Welche Suchbegriffe um hier im Forum eine Lösung zu finden sind die richtigen?


Vielen Dank und liebe Grüße

Sebastian
 
Werbung:
Code:
test=*# create table artikel(id int primary key, name text);
CREATE TABLE
test=*# create table attribute(id int primary key, t text, a_id int references artikel);
CREATE TABLE
test=*# insert into artikel values (1, 'testartikel');
INSERT 0 1
test=*# insert into artikel values (2, 'neuer artikel');
INSERT 0 1
test=*# insert into artikel values (3, 'mein artikel');
INSERT 0 1
test=*# insert into attribute values (1, 'hipp', 1);
INSERT 0 1
test=*# insert into attribute values (2, 'hopp', 1);
INSERT 0 1
test=*# select artikel.id, count(attribute.*) from artikel left join attribute on artikel.id=attribute.a_id where attribute.t in ('hipp','hopp') group by artikel.id having count(attribute.*) = 2;
 id | count
----+-------
  1 |  2
(1 Zeile)

Mit besseren Datenbanken wie z.B. PostgreSQL hättest Du weit bessere Möglichkeiten, das nur mal so....
 
Hallo und vielen Dank.

Man muss mit dem arbeiten, was man vorgesetzt bekommt.

Den Join mit Count zu kombinieren, das war es.

INTERSECT müsste auch gehen, wobei ich da erst ein Update auf MySQL 5.5 "anmahnen" müsste.
Ich probiere das Montag Morgen gleich aus.

Nochmal vielen Dank und liebe Grüße

Sebastian
 
Werbung:
Zurück
Oben