Willkommen bei Entwickler-Forum.
Seite 2 von 2 ErsteErste 1 2
Ergebnis 11 bis 16 von 16
  1. #11
    Stammgast
    Registriert seit
    26.02.2003
    Ort
    Hattingen
    Beiträge
    1.372

    Standard

    Der Kollege kann noch nicht mitreden, er hat noch keine Bestätigungsmail.
    Das System ist "Powered by osCommerce". Genaueres wird der Kollege sagen können.

    Die Tabelle mit den Rabatten ist aber nicht Original, die haben wir hinzugefrickelt.

    Code:
    CREATE TABLE `customers_discount` (
        `customers_discount_id` INT(11) NOT NULL AUTO_INCREMENT,
        `customers_id` INT(11) NOT NULL,
        `categories_id` INT(11) NOT NULL,
        `product_id` INT(11) NULL DEFAULT NULL,
        `Rabatt` DOUBLE NULL DEFAULT NULL,
        PRIMARY KEY (`customers_discount_id`)
    )
    COLLATE='latin1_swedish_ci'
    ENGINE=InnoDB
    AUTO_INCREMENT=150
    ;

    Günther

  2. #12
    Stammgast
    Registriert seit
    26.02.2003
    Ort
    Hattingen
    Beiträge
    1.372

    Standard

    Meine Zahlenwerte, gestern 19:07 Uhr hatte ich "aus dem Kopf", sie passen nicht so ganz zu den Daten im Bild
    Angehängte Grafiken Angehängte Grafiken
    Günther

  3. #13
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.291

    Standard

    Ich vermute mal, dass Ihr dass so gemacht habt, weil ihr die Originaltabellen nicht ändern wollt? Die vorliegenden Daten sagen zwar noch nichts über das gesamte Modell aber nun denn,

    erster Vorschlag auf die Schnelle in Worten:
    Die customers_discount Tabelle ein 2. Mal joinen, eingeschränkt auf reine Category Referenzen. Dieser Join wird ebenfalls left gemacht.
    Der join zwischen Category und Product wird unconditional gemacht, "if" also raus.
    Damit erhält man im Ergebnis 2 Rabatte, aber nicht untereinander in Form 2er Produkte, sondern nebeneinander.
    Das ist dann die Stunde von Case (siehe oben), Case entscheidet nun, welcher Rabatt eingesetzt wird.

    Statement zum 2. Einbinden:
    (Select .. from customers_discount where product_id!=0) as x

    Zu dem "gefrickelten original":
    Ich hab mit Shopsystemen nichts am Hut, aber ich find es beruhigend, dass es nicht original ist.
    Das If Construct läuft darauf hinaus, dass in dem einen Fall einfach ein Join weggelassen wird. Was macht eine DB Engine daraus? Sie nimmt alles was geht, mischt jeden Teil der einen Menge mit jedem der anderen Menge. Das will sicher niemand, aber so sind halt die Regeln und das Ergebnis ist unbrauchbar (wenn es überhaupt zustande kommt)

    Probiert das mal aus.
    Gruß, defo

  4. #14
    Stammgast
    Registriert seit
    26.02.2003
    Ort
    Hattingen
    Beiträge
    1.372

    Standard

    Hi defo,
    Es funktioniert :-)
    Danke
    Günther

  5. #15
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.291

    Standard

    Zitat Zitat von Günther Weber Beitrag anzeigen
    Hi defo,
    Es funktioniert :-)
    Danke
    Sehr schön!
    Hab gerade bemerkt, dass mein Vorschlag für "2.Einbindung" falsch ist, müsste "=0" sein für die Discounts ohne Produktanbindung, nicht "!=0"

    Aber habt Ihr wahrscheinlich selber auch bemerkt.

    Schön wäre ja, wenn Ihr das Ergebnis noch hier präsentiert, dann haben andere auch was davon.
    Geändert von defo (01.06.2017 um 00:35 Uhr)
    Gruß, defo

  6. #16
    Stammgast
    Registriert seit
    26.02.2003
    Ort
    Hattingen
    Beiträge
    1.372

    Standard

    Ich war zwischenzeitlich in Urlaub und der Kollege kann hier immernoch nicht mitreden.
    So funktioniert es jetzt:

    Code:
    "select p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, 
    (CASE WHEN cd2.product_id !=0 THEN p.products_price*(100-cd2.Rabatt)/100 ELSE p.products_price*(100-cd.Rabatt)/100 end) as final_price 
    from " . TABLE_PRODUCTS . " p 
    left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id 
    LEFT JOIN " . TABLE_CUSTOMERS_DISCOUNT  . " cd on cd.customers_id ='" .(int) $customer_id. "'and cd.categories_id = '" .(int) $current_category_id. "' and cd.product_id ='0' 
    left join " . TABLE_CUSTOMERS_DISCOUNT  . " cd2 on cd2.customers_id ='" .(int) $customer_id. "'and cd2.categories_id = '" .(int) $current_category_id. "'and cd2.product_id =  p.products_id, 
    " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c 
    where p.products_status = '1' 
    and p.manufacturers_id = m.manufacturers_id 
    and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' 
    and p.products_id = p2c.products_id and pd.products_id = p2c.products_id 
    and pd.language_id = '" . (int)$languages_id . "' 
    and p2c.categories_id = '" . (int)$current_category_id . "'";
    Nochmals vielen Dank
    Günther

 

 
Seite 2 von 2 ErsteErste 1 2

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •