Hi
ich habe folgendes Problem
ich habe folgende Tabellen
attribute
---------
id
attribut_name
Bsp:
1; haarfarbe;
2; augenfabe;
attribut_optionen
-----------------
id
attribut_id
option_name
Bsp:
1; gruen;
2; schwarz;
...udn weitere zuordnungstabellen
und jetzt gibts eine zuordnungstabelle
person_zu_attibut_und_option
-----------------------------
id
person_id
attribut_id
option_id
Bsp:
1; 1; 1; 1; /klartext - id 1; person 1; haarfarbe; grün;
2; 1; 2; 1; /klartext - id 2; person 1; augenfarbe; grün;
3; 2; 2; 2; /klartext - id 3; person 2; augenfarbe; schwarz;
so und jetzt möchte ich Personen suchen, die zb Haarfabe=schwarz haben.
das geht noch richtig schnell. (5ms)
doch wie kann ich nach mehreren Sachen suchen zb alle Personen die Haarfarbe=grün und Augenfarbe=grün haben?
In meinem Fall habe ich zb 1mio Einträge und die Suche dauert über 2 sek.
SELECT person_id, COUNT(person_id) anzahl
FROM person_zu_attibut_und_option
WHERE
(attribut_id=1 AND option_id=1) OR
(attribut_id=2 AND option_id=1)
GROUP BY person_id
HAVING anzahl=2
die Persormance geht durch das GROUP BY verloren, aber mit AND funktioniert es nicht, SubSelects sind noch langsamer und daher fällt mir nur diese Lösung ein.
Oder gibt es keine Möglichkeit und ich muss bei zb. 60 Attributten 60 Spalten anlegen?
Vielen Dank im Vorraus schon mal für Eure Hilfe.
ich habe folgendes Problem
ich habe folgende Tabellen
attribute
---------
id
attribut_name
Bsp:
1; haarfarbe;
2; augenfabe;
attribut_optionen
-----------------
id
attribut_id
option_name
Bsp:
1; gruen;
2; schwarz;
...udn weitere zuordnungstabellen
und jetzt gibts eine zuordnungstabelle
person_zu_attibut_und_option
-----------------------------
id
person_id
attribut_id
option_id
Bsp:
1; 1; 1; 1; /klartext - id 1; person 1; haarfarbe; grün;
2; 1; 2; 1; /klartext - id 2; person 1; augenfarbe; grün;
3; 2; 2; 2; /klartext - id 3; person 2; augenfarbe; schwarz;
so und jetzt möchte ich Personen suchen, die zb Haarfabe=schwarz haben.
das geht noch richtig schnell. (5ms)
doch wie kann ich nach mehreren Sachen suchen zb alle Personen die Haarfarbe=grün und Augenfarbe=grün haben?
In meinem Fall habe ich zb 1mio Einträge und die Suche dauert über 2 sek.
SELECT person_id, COUNT(person_id) anzahl
FROM person_zu_attibut_und_option
WHERE
(attribut_id=1 AND option_id=1) OR
(attribut_id=2 AND option_id=1)
GROUP BY person_id
HAVING anzahl=2
die Persormance geht durch das GROUP BY verloren, aber mit AND funktioniert es nicht, SubSelects sind noch langsamer und daher fällt mir nur diese Lösung ein.
Oder gibt es keine Möglichkeit und ich muss bei zb. 60 Attributten 60 Spalten anlegen?
Vielen Dank im Vorraus schon mal für Eure Hilfe.