Ankündigung

Einklappen
Keine Ankündigung bisher.

Auslesen von Daten aus mehreren Tabellen, wenn mehrere Werte pro Tabelle zutreffen

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

  • Auslesen von Daten aus mehreren Tabellen, wenn mehrere Werte pro Tabelle zutreffen

    Hallo zusammen,

    ich habe eine normalisierte SQL-DB mit mehreren Tabellen und ein HTML-Formular zum Auslesen der Daten. Nun gibt es hier auch Tabellen, die Produkteigenschaften enthalten, wobei jedes Produkt natürlich auch mehrere Eigenschaften gleichzeitig haben kann:

    Übergeordnete Haupttabelle: product_main pm,
    Zwei untergeordnete Tabellen mit den Eigenschaften: product_characteristics1 pc1, product_characteristics2 pc2
    product1_id und product2_id sind jeweils die Foreign-Keys.

    Wenn ich z.B. alle Produktnamen auslesen möchte, die die Eigenschaften characteristic47 und characteristic11 haben, gelingt das mit folgender Abfrage:

    PHP-Code:
    SELECT pm.name FROM product_main pmproduct_characteristics1 pc1 WHERE (pc1.characteristic1 'characteristic47' OR pc1.characteristic1 'characteristic12') AND pm.id pc1.product_id GROUP BY pm.id HAVING COUNT(*) = 
    Wobei die Eigenschaften characteristic47 und characteristic12 in derselben Tabelle stehen.

    Nun habe ich jedoch noch eine zweite Tabelle, die Produkteigenschaften enthält (eine Tabelle für Farbe, eine für Größe).
    Wenn ich nun aus 2 unterschiedlichen Tabellen je eine Eigenschaft abfrage, klappt das weiterhin mit:

    PHP-Code:
    SELECT pm.name FROM product_main pmproduct_characteristics1 pc1product_characteristics2 pc2 WHERE (pc1.characteristic1 'characteristic47') AND (pc2.characteristic2 'characteristic53') AND pm.id pc1.product_id AND pm.id pc2.product_id GROUP BY pm.id HAVING COUNT(pc1.product_id) = AND COUNT(pc2.product_id) = 
    Wenn ich nun aber aus der ersten Tabelle mehr als eine Eigenschaft auswähle und auch noch mindestens eine weitere Eigenschaft aus einer zweiten Tabelle, dann klappt das Ganze nicht mehr, wenn ich es auf dieselbe Art versuche:

    PHP-Code:
    SELECT pm.name FROM product_main pmproduct_characteristics1 pc1product_characteristics2 pc2 WHERE (pc1.characteristic1 'characteristic47' OR pc1.characteristic1 'characteristic17') AND (pc2.characteristic2 'characteristic53') AND pm.id pc1.product_id AND pm.id pc2.product_id GROUP BY pm.id HAVING COUNT(pc1.product_id) = AND COUNT(pc2.product_id) = 
    Könnte mir bitte jemand sagen, wie meine Abfrage (wenn möglich mit GROUB BY/HAVING und ohne JOIN) aussehen muss, damit ich mehrere Eigenschaften aus mehreren Tabellen gleichzeitig abfragen kann?

    Vielen Dank!



  • #2
    Also erst mal, du machst ein CROSS JOIN, wo du en LEFT/INNER JOIN machen solltest ...

    Könnte mir bitte jemand sagen, wie meine Abfrage (wenn möglich mit GROUB BY/HAVING und ohne JOIN) aussehen muss
    es geht nur mit JOINs, dazu sind Datenbankrelationen schließlich da.

    Außerdem, schau dir mal das EAV-Design (Entity-Attribute-Value) an, das könnte zu deinen Daten besser passen. https://en.wikipedia.org/wiki/Entity...%93value_model

    Kommentar


    • #3
      Danke für Deinen Tipp, Dormilich! Gibt es eine einfache Erklärung dafür, dass meine Abfrage klappt, wenn ich mehrere Eigenschaften aus einer Tabelle oder je 1 Eigenschaft aus mehreren Tabellen abfrage, jedoch nicht, wenn es mehrere Eigenschaften aus mehr als einer Tabelle sind?

      Kommentar


      • #4
        Mit "... HAVING COUNT(DISTINCT pc1.characteristic1) = 2 AND COUNT(DISTINCT pc2.characteristic2) = 1" funktionierts in allen Fällen.

        Kommentar


        • #5
          Vielen Dank erc, funktioniert perfekt!!

          Kommentar

          Lädt...
          X