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

  • 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!


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

    Kommentar


    • #3
      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?

      Kommentar


      • #4
        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.
        Relax, you're doing fine.
        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

        Kommentar


        • #5
          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!!!

          Kommentar


          • #6
            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
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              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)
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar

              Lädt...
              X