Peter Mairhofer: mySQL Berechnungen?

Hallo,

Ich habe einen Produktkataglog (t_produkte) und für jedes Produkt gibt es variabel verschiedene Kategorien, Preise, Anzeigedauer, ob es neu ist, ob es ein Featureprodukt ist etc.

Also hab' ich für alle diese Sachen Subtabellen erstellt und mittels normalen LEFT JOINS verknüpft.
Mit WHERE mag ich dann die Suche eingrenzen.

Beim Preis gibt's jetzt verschiedene Möglichkeiten:

  • Es können für ein Produkt mehrere Preise existieren (z.B. High Quality, Low Quality oder so)

  • Es kann für ein Produkt einen Grundpreis geben (z.B. es kostet 50 euro)

  • Es kann in pro Element einen Preis geben (z.B. eine Schachtel Nägel kostet 10 Cent pro Nagel)

  • Es kann eine Kombination aus allem sein (z.B. Zustellservice kostet pauschal 40 Euro und 1 Euro/km)

  • Es wird NOCH komplexer: Es können für einen Eintrag Regeln existieren, z.B. eine Schachtel Nägel kostet 10 Cent pro Nagel; ab 100 Nägel kostet ein Nagel 7 Cent

Nun möchte ich nach allen Kriterien quer durch den Gemüsegarten suchen und abfragen.

Die JOINS scheinen zu funktionieren, zum Schluss habe ich ein GROUP BY ID, dass ich keine doppelten Einträge bekomme.

Aber wie kann ich jetzt z.B. nach allen Produkten suchen, wo ich 53 Einheiten (z.B. Nägel) brauche aber nur 50 bis 60 Euro habe?
(Da soll jetzt auch der Grundpreis und der Preis pro Einheit berücksichtigt werden).

Bei einem Katalog von nur 1000 Produkten bekomme ich bei der Abfrage ca 50000 Zeilen weil es eben so viele verschiedene Möglichkeiten gibt und da ist es nur verständlich, dass ich nicht alle Zeilen in mein Programm laden will (sei es jetzt MFC über ODBC oder ein PHP Script) und dort in der Schleife alle Zeilen durchlaufen und alles probieren.

Und da ja SQL genau diese Powersprache ist müsste das doch gehen oder?

Wie komme ich weiter??

Danke,

Peter

PS: Ich bin schon auf der primitiven Art gescheitert. Es hat nicht mal folgendes funktioniert.
(...)
WHERE
((ts_produkt_preis.grundpreis + (ts_produkt_preis.preiselem * 100)) >= 200) AND ((ts_produkt_preis.grundpreis + (ts_produkt_preis.preiselem * 100)) <= 300)

wenn ich zB 100 Einheiten von einem Produkt will und 200 bis 300 Euro habe...

  1. Hallo Peter,

    das sieht mir verflixt ähnlich aus, wie mein Problem mit den varianten Eigenschaften. Was sind Preise schon anderes, als Eigenschaften eines Produktes?

    Allerdings ist der Datentyp Deiner Entitäten immer der selbe. Ich habe das nun auch noch frei definierbar halten wollen:
    Mal String, mal Blob, mal Zahl...

    Wahrscheinlich ist Dein Relationship Model noch nicht ausgereift genug, um eine Lösung zu bekommen. Su solltest versuchen, die Preise zu kategorisieren und dann alle zusammen in einer Tabelle abzuspeichern. Dann kann man mit Hilfe des Regelwerks für die Kategorien den / die gültigen Preis(e) abfragen und Gruppieren.

    Grüße

    Tom

  2. Hallo Peter,

    verstanden habe ich Dich ja nicht, aber mir scheint Dein Konzept etwas inkonsequent.

    Beim Preis gibt's jetzt verschiedene Möglichkeiten:

    • Es können für ein Produkt mehrere Preise existieren (z.B. High Quality, Low Quality oder so)

    Dies wären meiner Ansicht nach zum Beispiel zwei Datensätze: Entweder 'Nagel_high', 'Nagel_low' oder eine Verknüpfung zwischen tab_Produkte und tab_Qualitaetsstufen. In 'tab_Qualitaetsstufen' gibt es dann die Datensätze 'high' und 'low' mit dem jeweiligen aufschlagfaktor. Jedenfalls sollte doch wohl jeder Nageltyp eindeutig zu identifizieren sein, also auch einen eindeutigen Preis haben, oder?

    • Es kann für ein Produkt einen Grundpreis geben (z.B. es kostet 50 euro)

    Für die Grundpreise muß es doch eine ähnliche eindeutige Zuordnung geben.

    • Es kann eine Kombination aus allem sein (z.B. Zustellservice kostet pauschal 40 Euro und 1 Euro/km)

    KANN oder MUSS? - das muß doch für - z.B. den Nagel - eindeutig sein.

    Wie komme ich weiter??

    vielleicht, indem Du mal _eine_ Problematische Fragestellung und die dazugehörigen Tabellen zeigst...

    Gruß, Andreas