[MySQL] Abfrage bricht bei großer Datenmenge ein...

tvtotal

Erfahrenes Mitglied
Hallo, ich habe folgende Abfrage, die bei großer Datenmenge (über 2000 Produkte) einbricht, weil der Speicher nicht ausreicht. Kann ich das irgendwie anders lösen?

SQL:
SELECT id FROM prods WHERE active = 1 AND (parentid = '' AND id NOT IN (SELECT parentid FROM prods WHERE 1) OR ( parentid != '') OR (parentid = '' AND id IN (SELECT parentid FROM prods WHERE 1)) ) AND stock >= 0 AND price > 0

Danke tvtotal
 
Also, du willst folgendes? ID's Anzeigen aus prods die folgende Bedingungen erfüllen:
  • Sind aktiv (active = 1)
  • Sind verfügbar (stock >= 0)
  • Haben einen Preis (price > 0)
  • Und:
  • A. Sind ein Child Produkt (parentid != '')
  • oder B. Sind ein Parent Produkt (parentid = '') dessen ID auch von anderen Produkten verwendet wird (id IN). In anderen Worten dieser Parent hat auch ein Child
  • oder C. Sind ein Parent Produkt (parentid = '') dessen ID auch von keinem anderen Produkten verwendet wird (id NOT IN). In anderen Worten dieser Parent hat kein Child

Wenn ich mir das so anhöre, dann wirst du mit dieser A,B,C Geschichte sowieso immer alle kriegen. Childs, Parents mit Childs, Parents ohne Childs.
Ich kenne zwar deine Daten nicht, aber ich denke du kannst komplett auf die Parent Child Abfrage verzichten:
SQL:
SELECT
    id
FROM
    prods
WHERE
    active = 1
    AND stock >= 0
    AND price > 0
 
Halllo und danke. Die Parent-Abfrage hat schon seinen Sinn, allerdings ist das hier die Gesamtabfrage (habe ich vergessen, zu erwähnen). A, B und C (aus deiner Liste) sind wählbar und kommen nur bei Bedarf hinzu. Deswegen müssen sie drin bleiben.
 
Aha. Na dass ist dann schon noch ein wichtiger Punkt...
Dann anders gefragt: was sind denn die einzelnen Optionen/Abfragen wenn man es separiert betrachtet?
 
Hallo, ich habe es hinbekommen mit obigem. Ich musste nur eine weitere Schleife einfügen, damit das Array nicht zu groß wird. Danke für die Hilfe!
 
Zurück