Ankündigung

Einklappen
Keine Ankündigung bisher.

Select

Einklappen

Neue Werbung 2019

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

  • Select

    Hi, ich habe eine Datenbank Windräder und darin eine Tabelle (Seriennummer, Typ ,Windpark, Status). Dort sind alle Windräder aufgelistet und DFÜ (Fernüberwachung 1x für den gesamten Windpark dabei ist der Typ DFÜ und die Seiriennummer auch der Name des Windparks).
    Es MUSS aber keine DFÜ geben.


    nun möchte ich mir ALLE Windparks ausgeben lassen (SELECT DISTINCT "Windpark" FROM "Windräder") und jeweils deren letzten Status (SELECT DISTICT "Windpark, LetzterStatus" FROM "Windräder" WHERE Typ LIKE "DFÜ").

    aber da ist ja das Problem, dass ich dann nur die Windparks mit DFÜ bekomme, ich will aber alle Windparks haben, und WENN diese eine DFÜ haben, dann auch noch ihren letzten Status... wie mache ich das? Ich kann natürlich jeden Windpark suchen und dann, ob sie eine DFÜ haben, aber das erscheint mir nicht elegant gelöst, gibt es da nicht was mit LEFT JOIN?

  • #2
    Wie kann ein Windpark EIN letzten Status haben wenn jedes Windrad ein letzten Status hat? Ist das ene, mene, muh?

    Kommentar


    • #3
      nein, eine Anlage kann den LETZTEN Status 'Störung, WEA Steht' haben, während die Fernüberwachung gleichzeitig angibt 'keine Kommunikation' oder aber die DFÜ sagt "Verbindung steht" während 2 Anlagen repariert werden(Status reparation). Es gibt eine DFÜ pro Windpark, das heißt nicht, dass alle Anlagen diesen letzten Status übernehmen, das habe ich etwas unglücklich formuliert. Die DFÜ gibt eine Art Pseudo Status für den WP wieder. Da es nur eine DFÜ pro WP gibt, habe ich es wahrscheinlich etwas zu sehr vermischt sry.

      Kommentar


      • #4
        Das was ich mir aus dem Query zusammenreimen kann sagt was anderes. Im einfachsten Falle wärs dann wahrscheinlich:

        PHP-Code:
        SELECT WindparkMAX(LetzterStatusFROM Windräder GROUP BY Windpark 
        Je, nachdem was du noch vor hast solltest du aber vielleicht das Schema überdenken. https://de.wikipedia.org/wiki/Normal...28Datenbank%29

        Kommentar


        • #5
          Nein, die DB stimmt schon, da der Windpark als Attribut des Windrads angesehen wírd um es in einer Maske schneller zu finden und die DFÜ eh nur Spielerei ist (die aber funzt).^^ Ich suche etwas wie
          PHP-Code:
          "SELECT Windpark, LetzterStatus FROM Windräder WHERE Typ = 'DFÜ' {wenn dieser Windpark keinen Datensatz mit Typ DFÜ besitzt, dann SELECT Windpark, LetzterStatus='nichtda'}" 
          und die geschweiften Klammern müsste mir wer in SQL übersetzen^^

          Kommentar


          • #6
            Zitat von KuSpa Beitrag anzeigen
            suche etwas wie "SELECT Windpark, LetzterStatus FROM Windräder WHERE Typ = 'DFÜ' {wenn dieser Windpark keinen Datensatz mit Typ DFÜ besitzt, dann SELECT Windpark, LetzterStatus='nichtda'}"
            Dir ist offenbar nicht klar, dass "where" eine Filterung durchführt. Nach der Where Clause Typ=DFÜ wird nie etwas anderes angezeigt werden.
            Das Where muss also raus, damit Du eine vollständige Menge bekommst und die Unterscheidung gehört in den Ausgabeteil.
            Code:
            SELECT Windpark,if(Typ='DFÜ',LetzterStatus ,'nichtda')FROM Windräder
            Gruppieren schaffst du sicher.

            Kommentar


            • #7
              groupen möchte ich nicht, da dadurch bei mir immer was rausfällt oder mehr stehen bleibt als mit
              PHP-Code:
              SELECT DISTINCT Windpark,if(Typ='DFÜ',LetzterStatus ,'nichtda')FROM Wka 
              Hier kommt nun (bspw):
              WINDPARK Letzterstatus
              Wp2 ok
              Wp3 Wartung
              Wp4 Repararur
              Wp5 ok
              Wp6 ok
              Wp1 nichtda
              Wp2 nichtda
              Wp3 nichtda
              Wp4 nichtda
              Wp5 nichtda
              Wp6 nichtda
              Kann ich den Query so ändern, dass er alle Windparks mit dem LetztenStatus = 'nichtda' löscht, wenn noch ein Eintrag des Windparks da ist, wo LetzterStatus !='nichtda' ist? also dass die Tabelle so aussähe:
              WINDPARK LetzterStatus
              Wp1 nichtda
              Wp2 ok
              Wp3 Wartung
              Wp4 Reparatur
              Wp5 ok
              Wp6 ok
              oder muss ich das dann mit php lösen?

              Kommentar


              • #8
                Steht da wirklich "nichtda" als Status wenn kein Status vorhanden ist? Eine Lösung hab ich oben schon gepostet. Wenn das mit nichtda wirklich der Fall ist müsstest du das vorm gruppieren noch korrigieren. Z.B.: so MAX(IF(Typ='DFÜ',LetzterStatus ,NULL)),

                Kommentar


                • #9
                  nein, nichtda ist ne Gedankenstütze :3, einfach etwas, das ausweißt, dass dort nichts eingetragen ist, ich kann das genauso gut mit NULL machen und mit empty($var) überprüfen

                  und danke erc, mit dem MAX klappt es nun, ich weiß nicht, warum ich es vorher nicht benutzte

                  danke für die Hilfe

                  Kommentar

                  Lädt...
                  X