ID über mehrere Tabellen auslesen

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

  • ID über mehrere Tabellen auslesen

    Guten Morgen

    Vielleicht hat einer von euch eine Idee wie ich das mit PHP oder sogar direkt mit MySQL erledigen könnte. Ich habe schon mit Inner Join versucht aber ohne erfolg was fast klar war

    Ich habe folgende Tabellen:
    shop_cart
    Code:
    cartID | productID | userID | ...
        1   |     1     |    1
        2   |     2     |    1
        3   |     1     |    2
        4   |     1     |    1
    Dann eine für die Attribute product_attribute
    Code:
    attributeID | productID | attribute
          1      |     1     |    Color
          2      |     1     |    Name
    Und eine für die Bestellungen mit den Attributen shop_cart_attribute

    Code:
    ID | cartID | attributeID | productID | value
    1  |   1    |      1      |      1    |   red
    2  |   1    |      2      |      1    |   Tina
    3  |   3    |      1      |      1    |   blue
    4  |   3    |      2      |      1    |   Tina
    5  |   4    |      1      |      1    |   blue
    6  |   4    |      2      |      1    |   Nina
    Nun habe ich in PHP folgende Informationen:

    PHP-Code:
    $productID 1$userID 1;
    $productAttributeArray[0]['attributeID'] = 1;
    $productAttributeArray[0]['value'] = red;
    $productAttributeArray[1]['attributeID'] = 2;
    $productAttributeArray[1]['value'] = Nina
    Gerne möchte ich nun die cartID herausfinden, welche komplett mit den Werten in der Datenbank übereinstimmt. In diesem Fall wäre es die ID 4. Versuch habe ich schon sowas:

    Code:
    SELECT  c.cartID FROM shop_cart c INNER JOIN  shop_cart_attribute a ON (c.cartID=a.cartID) WHERE (a.attributeID = 1  AND a.value = 'red') AND  (a.attributeID = 2 AND a.value = 'Nina')
    Dies ist leer da er ja nur Zeile für Zeile prüft.

    Vielen Dank schon im Voraus für jede Hilfe.

    Gruss

    Koda
    Zuletzt geändert von Koda; 13.03.2015, 09:00.

  • #2
    Zitat von Koda Beitrag anzeigen
    Dies ist leer da er ja nur Zeile für Zeile prüft.
    Eben – deshalb nicht mit AND suchen, sondern mit OR – um erst mal alle Datensätze zu finden, die eines der gesuchten Attribute aufweisen.
    Diese nach Produkt gruppieren, die Anzahl der Datensätze zählen – und mit HAVING verlangen, dass diese Anzahl gleich der der gesuchten Attribute ist (oder kleiner gleich, wenn es noch andere Attribute geben kann).
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hi

      Vielen Dank für deine Antwort. Mit OR funktioniert es bereits
      Code:
      SELECT  c.cartID FROM shop_cart c INNER JOIN  shop_cart_attribute a ON (c.cartID=a.cartID) WHERE (a.attributeID = 1  AND a.value = 'red') OR (a.attributeID = 2 AND a.value = 'Nina')
      Das Ziel ist es ja, das ich die ID nur bekomme wenn beides übereinstimmt. Da ich davon ausgehe deine Infos mit GROUP und HAVING werden einen Sinn bei irgendwelchen Ausnahmen machen habe ich es erweitert:

      Code:
      SELECT  COUNT(a.attributeID) AS count, c.cartID FROM shop_cart c INNER JOIN  shop_cart_attribute a  ON (c.cartID=a.cartID) WHERE (a.attributeID = 1  AND a.value = 'red')  OR (a.attributeID = 2 AND a.value = 'Nina') GROUP BY c.productID
      So funktioniert es noch immer. Es sind ja immer zwei Attribute in diesem Beispiel. Nun gibt mir das Feld count jedoch immer nur 1 aus. Somit geht ein HAVING = 2 da ich ja möchte das er es nur anzeigt wenn alles stimmt gar nicht. Habe ich ein Überlegungsfehler?

      Gruss

      Koda

      Kommentar


      • #4
        Nicht die Attribute zählen, sondern die cart ids.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Zitat von wahsaga Beitrag anzeigen
          Nicht die Attribute zählen, sondern die cart ids.
          Habe ich auch versucht und bekomme auch nur 1 zurück geliefert. Eigentlich ja logisch, da ich doch nur eine cartID haben dürfte bei dem beide Attribute übereinstimmen. oder verstehe ich da was falsch? (VERGISS DAS )


          EDIT: Habe mich zu früh gefreut. Wenn eines der Attribute richtig ist, so wird mir die erste gefunden ID gezeigt. wenn ich COUNT(c.cartID) mache wird mir 4 angezeigt.

          In meiner Testdatenbank gibt er mir bei COUNT(c.cartID) as COUNT 4 aus, da es 4 cartID gibt bei denen der eine oder der andere Wert vorkommt wen ich auch GROUP BY nutze. Nun frage ich mich aber wie ich an den Wert komme mit HAVING wo es ja in meinem Fall nur 2 sein dürften da es grad nur um 2 Attribute geht.
          Zuletzt geändert von Koda; 13.03.2015, 15:47.

          Kommentar

          Lädt...
          X