1:n Abfrage

Andi0815KA

Grünschnabel
Hallo.

Ich habe folgendes Problem (vereinfacht dagestellt)

Tabelle 1:

artikel_id
artikel_name
artikel_...


tabelle 2:

id
artikel_id
eigenschaft_id

in einer 1:n beziehung (ein artikel hat mehre eigenschaften).
Wie kann ich mir jetzt alle Artikel anzeigen lassen die eigenschaft x,y und z haben?

Irgendwie stehe ich gerade auf dem Schlauch :(
 
Hi!

Ich denke du gehst das Problem falsch an. 1 Artikel hat n Eigenschaften, klar. Aber kann nicht auch 1 Eigenschaft mehrere Artikel haben, die diese Eigenschaft besitzen? Dann hättest du eine n:m Beziehnung.

Dann hast du automatisch 3 Tabellen:
  1. Artikel-Tabelle (wie du sie schon hast)
  2. Eigenschaften-Tabelle (also eigenschaft_id und z.B. ein Name)
  3. Zuweisungstabelle (artikelId + eigenschaftId als gemeinsamer Primary Key)

Abfragen kannst du das dann wie folgt:

SQL:
SELECT DISTINCT * FROM
TB_ARTIKEL a
INNER JOIN TB_ARTIKEL_EIGENSCHAFT ae ON a.artikelId = ae.artikelId
INNER JOIN TB_EIGENSCHAFT e ON ae.eigenschaftId = e.eigenschaftId
WHERE e.eigenschaftId IN (0, 1, 2);

bzw. wenn du das mit den Eigenschaftsnamen auch hast, kannst du mit nem Sub-Select auch den Namen oder andere Attribute überprüfen:

SQL:
SELECT DISTINCT * FROM
TB_ARTIKEL a
INNER JOIN TB_ARTIKEL_EIGENSCHAFT ae ON a.artikelId = ae.artikelId
INNER JOIN TB_EIGENSCHAFT e ON ae.eigenschaftId = e.eigenschaftId
WHERE e.eigenschaftId IN (
    SELECT eigenschaftId FROM
    TB_EIGENSCHAFT
    WHERE name IN ('x', 'y', 'z');
);

Hab das Ganze jetzt nicht getestet und nur mal schnell ausm Kopf hingeschrieben, aber mit MySQL sollte es funktionieren. Andere Datenbanksysteme machens aber ähnlich oder genauso, denk ich mal :)


Gruß
Daniel
 
SQL:
select
t1.artikel_name
from
tabelle1 t1
inner join
tabelle2 t2
on
t1.artikel_id = t2.artikel_id
where
t2.eigenschaft_id in (‘x’,’y’,’z’);

oder

SQL:
select
t1.artikel_name
from
tabelle1 t1
where
  t1.artikel_id in (select distinct artikel_id from tabelle2 where eigenschaft_id in (‘x’,’y’,’z’));

Nur ist mir noch nicht ganz klar ob du nur Artikel haben willst die alle 3 Eigenschaften haben, oder eine davon.
 
Zurück