Hey danke,
hab ich auch gerade schon gemacht. das problem ist, es geht nicht für JPA zu mappen. :-/
also hab ich einfach mal diese demoralisierende denormalisierte tabelle zusätzlich als queryBooster eingebunden. muss nur schauen, dass ich das ding dann irgendwie mitpflege... :-/
ein kleines bischen statistik:
kunde: 6.000 datensätze
warenkorb: 21.961 datensätze
assoziation: 703.166 datensätze
ware: 10.958 datensätze
denormalisiert:
kunde: 6.000 datensätze
warenkorb_turbo: 703.166 datensätze
ware: 10.958 datensätze
die abfrage ist jetzt übrigens ungefähr so (verständlich gemacht; beispiel für 4 waren in der abfrage):
SELECT * FROM kunde
WHERE kunde_TYPE_ID = 3 #ignoriert das mal, das sind zusätzliche einschränkungen
AND kunde_CATEGORY_TYPE_ID = 3000 # - || -
AND kunde_HIDDEN = 0
AND kunde_ID IN
(
SELECT kunde_ID FROM wahrenkorb_turbo #die neue assoziation (kunde_id, wahrenkorb_id, ware_id)
WHERE wahrenkorb_TYPE_ID = 1
AND wahre_ID IN
(
select wahre_ID from wahre
where wahre_TYPE_ID=104 #gemüse
AND (ware_STRING='Karotte' OR ware_STRING='Kartoffel')
)
)
AND kunde_ID IN
(
SELECT kunde_ID FROM wahrenkorb_turbo
WHERE wahrenkorb_TYPE_ID = 1
AND wahre_ID IN
(
select wahre_ID from wahre
where wahre_TYPE_ID=109 #obst
AND (ware_STRING='Apfel')
)
)
AND kunde_ID IN
(
SELECT kunde_ID FROM wahrenkorb_turbo
WHERE wahrenkorb_TYPE_ID = 1
AND wahre_ID IN
(
select wahre_ID from wahre
where wahre_TYPE_ID=113 #haushaltswaren
AND (ware_STRING='Topf' OR ware_STRING='Schüssel' OR ware_STRING='messer')
)
)
AND kunde_ID IN
(
SELECT kunde_ID FROM wahrenkorb_turbo
WHERE wahrenkorb_TYPE_ID = 1
AND wahre_ID IN
(
select wahre_ID from wahre
where wahre_TYPE_ID=431 #Elektronikwaren
AND (ware_STRING='Radio')
)
)
Edited 2 time(s). Last edit at 09/17/2010 07:20AM by Gerald Koch.