Gruppierung zwischenschieben

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

  • Gruppierung zwischenschieben

    Hallo!

    Nehmen wir mal an, ich habe folgende Tabelle:
    PHP-Code:
     T1
    ID 
    Content
     1 
    Hier steht irgendwas
     2 
    Hier steht auch irgendwas
     3 
    Hier steht irgendwas anderes
     4 
    Hier steht gar nichts
     5 
    Hier könnte Ihre Werbung stehen 
    Sowie zusätzlich diese:
    PHP-Code:
     T2
    ID 
    PID CID GROUP
     1 
    |   |   
     
    |   |     | 2
     3 
    |   |   
     
    |   |   
    Und diese:
    PHP-Code:
     T3
    ID 
    GID CID
     1 
    |   2
     1 
    |   
    Und dazu die folgende Abfrage:
    PHP-Code:
    SELECT db2.* FROM T2 AS db1 LEFT JOIN T1 AS db2 ON (db1.cid db2.idWHERE db1.pid 
    Diese Abfrage (als beispiel) wie sie da oben steht, liefert mir den Content aus T1 mit der ID 1, 4, und 5. Nun möchte ich die Abfrage um folgende Funktion erweitern:

    Ist in T2 GROUP gesetzt, so sollen die CIDs aus T3 rausgeholt werden und in der entsprechenden Reihenfolge positioniert werden, womit die Ausgabe erwartungsgemäß 1,2,3,4,5 sein sollte.

    Nur habe ich leider keine Ahnung ob das überhaupt so möglich ist und wenn ja wie ich die Abfrage entsprechend erweitern muss.

    Hat jemand von Euch zufällig ne Tip oder ne Lösung?

    Danke schonmal!

  • #2
    Mittels IF einen Subselect ausführen lassen?

    Kommentar


    • #3
      Die frage ist nur wie der Subselect aussehen muss. Bei meinem Versuch kam die Meldung dass das Subquery mehr als eine Zeile liefert...

      Kommentar


      • #4
        N'abend,


        Andere Frage..,
        - willst Du nur die Datensätze ausgeben bei denen GROUP gesetzt ist?
        - oder alle einfach nur die CIDs dazu, falls vorhanden?


        Je nach dem könnte wahrscheinlich auch ein weiterer JOIN ausreichen *denk*

        Kommentar


        • #5
          Nein, ich will einfach datensätze gruppieren. Nehmen wir mal an Du hast die CIDs 1, 2, 3, 4, 5. Dann möchte ich sagen, 2, 3, 4 bilden eine Gruppe, so dass ich dann habe: 1, Gruppe 5, und dann die Abfrage so gestalten kann, das ich als Ausgabe trotzdem 1, 2, 3, 4, 5 erhalte.

          Habe allerdings gerade meine Tabellen etwas umstrukturiert und damit auch endlich die Lösung für das Problem gefunden...

          Kommentar


          • #6
            Da hättest du gar nicht umstrukturieren brauchen...

            SELECT *
            FROM T2 t2
            INNER JOIN T1 t1 ON (t1.cid = t2.id)
            LEFT JOIN T3 t3 ON (t2.group IS NOT NULL AND t2.group = t3.gid)
            WHERE t1.pid = 1
            ORDER BY IFNULL(t2.cid, t2.group), t3.cid

            oder so ewas in der Art... bei deiner Sortierung musst du mal gucken, und bei dem SELECT * oben wirst du wohl auch mit IFNULL oder COALESCE arbeiten müssen um die gewünschten Werte zu erhalten (oder auch nicht, je nachdem was du halt machen willst).

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Hallo!

              Die Umstrukturierung der Tabellen macht in meinem Fall jedoch mehr sinn, da es Spalten gab die ich für meine Bedürfnisse hätte mehrfach erstellen müssen, so habe ich die alle unter einen Hut gebracht. Danke aber trotzdem...

              Kommentar

              Lädt...
              X