Ankündigung

Einklappen
Keine Ankündigung bisher.

Welche Abfrage, um ID in Relationshiptabelle zu finden???

Einklappen

Neue Werbung 2019

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

  • sunspot
    hat ein Thema erstellt Welche Abfrage, um ID in Relationshiptabelle zu finden???.

    Welche Abfrage, um ID in Relationshiptabelle zu finden???

    hi!

    Ich finde leider nicht die richtige Abfrage, um folgendes herauszufinden:

    Ich habe eine Tabelle mit 2 Spalten, die erste Spalte ist die ID des Content Elements, die 2. Spalte die ID der Eigenschaft.

    ID Eigenschaft
    31 27
    31 55
    31 60
    32 27
    32 64

    Nun wird mittels eines Formulars Checkboxwerte übermittelt, und ich möchte herausfinden, welches Element alle diese Eigenschaften hat.
    Ich habe es mit "select distinct id from table where eigenschaft in (27,55,60)" probiert, das funktioniert, da die ID ja all diese Eigenschaften hat.
    Wenn ich aber zb. "select distinct id from table where eigenschaft in (27,55,60,64)" abfrage, dann bringt er mir auch die ID 31 als Ergebnis, aber die soll er ja nicht ausgeben.

    Ich steh einfach am Schlauch, wie ich das abfragen soll. Wär super, wenn mir jemand helfen könnte! Danke!

  • akretschmer
    antwortet
    Zitat von VPh Beitrag anzeigen
    This should work. Für jeden Wert einen Inner Join ranhängen.
    Ei ei ei, ...


    Code:
    test=*# select * from sunspot ;
     id | eigenschaft
    ----+-------------
     31 |          27
     31 |          55
     31 |          60
     32 |          27
     32 |          64
    (5 rows)
    
    Time: 0,145 ms
    test=*# select id from (select id, array_agg(eigenschaft) as eigenschaft from sunspot group by id) foo where eigenschaft @> array[27,55,60];
     id
    ----
     31
    (1 row)
    
    Time: 0,297 ms
    test=*# select id from (select id, array_agg(eigenschaft) as eigenschaft from sunspot group by id) foo where eigenschaft @> array[27,55,60, 62];
     id
    ----
    (0 rows)

    Einen Kommentar schreiben:


  • VPh
    antwortet
    1. Query: http://sqlfiddle.com/#!2/8a202/3/0
    2. Query: http://sqlfiddle.com/#!2/8a202/1/0

    Wenn bei dir das falsche Ergebnis kommt, hast du hier falsche Daten geliefert.

    Edit: Abfragen sind trotzdem fehlerhaft, wird überarbeitet
    Edit2:

    Code:
    SELECT
       DISTINCT Relation.ID   
    FROM
       Relation   
    JOIN
       Relation Abfrage1 
          ON Relation.ID = Abfrage1.ID 
          AND Abfrage1.Eigenschaft = 27   
    JOIN
       Relation Abfrage2 
          ON Relation.ID = Abfrage2.ID 
          AND Abfrage2.Eigenschaft = 55   
    JOIN
       Relation Abfrage3 
          ON Relation.ID = Abfrage3.ID 
          AND Abfrage3.Eigenschaft = 60
    This should work. Für jeden Wert einen Inner Join ranhängen.
    http://sqlfiddle.com/#!2/8a202/7/0

    Einen Kommentar schreiben:


  • sunspot
    antwortet
    Ich bekomme es weder mit ALL hin, noch mit dem 2. Tipp von VPh, der liefert mir immer ein leeres Ergebnis. Gibt es vielleicht noch einen Lösungsansatz?

    DANKE!!!

    Einen Kommentar schreiben:


  • VPh
    antwortet
    Code:
    SELECT
       DISTINCT ID 
    FROM
       Test   
    WHERE
       Eigenschaft IN (
          27, 55, 60
       )   
       AND (
          SELECT
             COUNT(*) 
          FROM
             Test sub 
          WHERE
             sub.ID = Test.ID
       ) = 3;
    Code:
    SELECT
       ID   
    FROM
       Test   
    WHERE
       Eigenschaft IN (
          27, 55, 60
       )   
    GROUP BY
       ID   
    HAVING
       COUNT(DISTINCT Eigenschaft) = 3;
    So würde es wohl funktionieren. Kann aber gerade nicht einschätzen ob ich da vielleicht Nebenwirkungen übersehe.

    Einen Kommentar schreiben:


  • sunspot
    antwortet
    Danke.
    Ich habe es nun mit "select id from tabelle where eigenschaft = ALL (52, 55, 54, 64)" probiert, aber da schreibt mir mysql eine Fehlermeldung.

    Noch einen Tipp, was an der query nicht passt?

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    Statt "IN" "ALL" verwenden. Du willst ja nicht das die Eigenschaft darin vorkommt, sondern das ALLE zutreffen.

    Einen Kommentar schreiben:

Lädt...
X