Werte v. Spalte 1, wenn Zeilen in Spalte 2 best. Kriterien erfüllen

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

  • Werte v. Spalte 1, wenn Zeilen in Spalte 2 best. Kriterien erfüllen

    Guten Morgen,

    seit gestern Abend versuche ich vezweifelt, eine Abfrage zu gestalten, die mir anfangs so simple schien. Doch wie ich mich auch anstrenge, ich bleibe gedanklich immer hängen. Vielleicht kann mir jemand von euch helfen oder sagen, dass es nicht möglich ist

    Teil der Tabelle train_allocations:

    Code:
    train_id    |    category_id
    ----------------------------
    1           |    17
    1           |    29
    1           |    39
    1           |    15
    1           |    16
    2           |    17
    2           |    14
    2           |    39
    2           |    15
    3           |    39
    3           |    11
    4           |    89
    4           |    17
    4           |    11
    4           |    39
    4           |    15
    Nun will ich wissen, welche train_id auf bestimmte, kombinierte category_id zutreffen.


    Beispiel:
    Vorgegeben sind die category_id 17 und 11
    In diesem Fall müsste das Ergebnis 4 sein, da nur die train_id 4 auf beide category_id zutrifft.

    Beispiel 2:
    Vorgegeben sind die category_id 17, 39 und 15
    In diesem Fall müsste das Ergebnis 1, 2 und 4 sein, da diese drei train_id die gesuchten category_id haben.


    An sich klingt das doch total einfach, nicht wahr? Und trotzdem hänge ich und hänge ich und hänge ich. Gruppieren geht nicht. Auch habe ich versucht, das über einen self join zu lösen, doch hier bin ich ebenfalls gescheitert.

    Die Notlösung ist natürlich, über OR abzufragen und dann per PHP zu filtern. Jedoch bin ich in meiner Naivität davon überzeugt, dass es auch eine SQL-Lösung gibt. Irgendwo.

    Vielen Dank fürs Lesen. Und noch mehr fürs Helfen

    pb

  • #2
    SELECT DISTINCT?
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Dann habe ich doch trotzdem nur eine Oder-Verknüpfung, so dass jede train_id zutreffend ist, die als category_id einen der gefragten Werte hat, nicht jedoch alle.

      Eine Und-Verknüpfung geht ja nicht, da ich über mehrere Zeilen hinweg und nicht über mehrere Spalten die Bedingung verknüpfe.

      Oder stehe ich auf dem Schlauch?

      Kommentar


      • #4
        Probiere mal:

        select ... from ... where category_id=... or category_id=... or ... group by train_id having count(train_id)>Anzahl_gesuchte_cat - 1

        Konkret:

        Fall 1:

        select ... from ... where category_id=17 or category_id=11 group by train_id having count(train_id)>1

        Fall 2:

        select ... from ... where category_id=17 or category_id=39 or category_id=15 group by train_id having count(train_id)>2
        Zuletzt geändert von asp2php; 11.06.2008, 12:01.

        Kommentar


        • #5
          Vielen Dank. Die Möglichkeiten, die HAVING eröffnet, vergesse ich immer wieder. In ersten Tests funktioniert die Abfrage in dieser Art wunderbar. Nochmals danke.

          Kommentar

          Lädt...
          X