Abfrage durch 3 Tabellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abfrage durch 3 Tabellen

    Möchte gerne eine Abfrage durch 3 Tabellen machen und weiß leider nicht genau wie.

    Ich habe eine Haupttabelle die besondere Produktempfehlungen beinhaltet.
    Tabelle: produkteempfehlung
    Felder: id(autoincrement), productid(id vom Produkt)

    Diese Tabelle soll alle Produkte aus der Produktdatenbank auflisten.
    Tabelle: produkte
    Felder: id(id vom produkt), name, beschreibung, usw.

    Soweit per "left join" kein problem die Daten zusammen zu fügen, jedoch möchte ich gerne nur Produkte anzeigen, die nicht bereits im Warenkorb gelegt sind.

    Mein Warenkorb ist wie folgt:
    Tabelle: cart
    Felder: id, productid(id vom Produkt), menge, sessionid, usw.

    Jemand ne Idee? Muss ich 2x left join machen, oder wie kann ich eine Ausnahmeregel erstellen? Ich hoffe ihr könnt mir und der Idee folgen
    Zuletzt geändert von dpssl; 03.02.2011, 08:37.

  • #2
    Hallo,

    hast du den Warenkorb in der Datenbank oder nur in einer Session? Ersteres würde es dir erlauben, über einen weiteren Left Join die Produkte wegzufiltern, die dort schon drin sind. Letzteres schließt das aus, da die DB nichts von der Session wissen kann. Das ist aber nicht schlimm. Die 2 bis 20 Produkte, die meist in einem Warenkorb drin sind, kann man auch mit PHP schnell noch rausfiltern, wenn man die Ausgabe vorbereitet.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Der Warenkorb wird in "cart" gespeichert und jeder Kunde hat eine Sessionid. Hab vergessen diese oben anzuhängen.
      Wie soll ich die Filterabfrage gestalten? beim 2. "Left Join" on cart.productid != produkteempfehlung.productid ?
      Muss ich die Abfrage irgendwie in Klammern setzen oderso?
      Zuletzt geändert von dpssl; 03.02.2011, 08:40.

      Kommentar


      • #4
        Versuch's mal mit cart.productid = produkteempfehlung.productid und nimm dann nur die, wo cart.productid null ist (where-Klausel).
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Sieht garnicht mal sooo schlecht aus.. Danke!

          Code:
          SELECT produkteempfehlung.productid, produkte.de_name, cart.artnummer, cart.userid
          FROM produkteempfehlung
          LEFT  JOIN produkte ON produkte.id = produkteempfehlung.productid
          LEFT  JOIN cart ON cart.artnummer = produkteempfehlung.productid
          WHERE cart.artnummer IS  NULL
          Regiert momentan auf alle Einträge im Warenkorb bzw. Tabelle cart. Wie grenze ich nun aus, dass er nur meine eigene "userid/sessionid" berücksichtigt? Ein "and" würde ja bewirken, dass er NUR meine Userid akzeptieren würde. Denke ich gerade irgendwie zu kompliziert?

          Kommentar


          • #6
            Soweit funktioniert es...

            Die Ausgabe ist wie folgt:
            Code:
            productid        name           userid
            1419              Produkt 1     c3d58e82172ece4c81730aefe86ee953
            1417              Produkt 2     NULL
            1443              Produkt 3     NULL
            1453              Produkt 4     c3d58e82172ece4c81730aefe86ee953
            1452              Produkt 5     NULL
            1448              Produkt 6     NULL
            92                 Produkt 7     c3d58e82172ece4c81730aefe86ee953
            1370              Produkt 8     NULL
            499                Produkt 9     NULL
            Wenn ich jetzt sage: "where cart.userid != 'c3d58e82172ece4c81730aefe86ee953'" Kommt leider garkein Ergebnis. Wieso? Wo ist der Denkfehler?

            Kommentar


            • #7
              Es scheint zu klappen!

              Lösung wie folgt:

              Code:
              SELECT produkteempfehlung.productid, produkte.de_name
              FROM produkteempfehlung
              LEFT JOIN produkte ON produkte.id = produkteempfehlung.productid
              WHERE NOT
              EXISTS (
              SELECT userid, artnummer
              FROM cart
              WHERE cart.artnummer = produkteempfehlung.productid and cart.userid = 'c3d58e82172ece4c81730aefe86ee953')

              Kommentar

              Lädt...
              X