Ankündigung

Einklappen
Keine Ankündigung bisher.

Count von nicht vorhanden Elementen MYSQL

Einklappen

Neue Werbung 2019

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

  • Count von nicht vorhanden Elementen MYSQL

    Hallo PHPler,

    ich habe ein kleines Problem bei meiner MySQL Abfrage und zwar versuche ich mir aus meiner DB die Summe der Typen eines bestimmten Regals pro Zimmer aufzulisten.

    Dies funktioniert mit folgendem Query auch:
    Code:
    Select typ, sum(case when zimmer.id=1 then 1 else 0 end) as wohnzimmer, sum(case when zimmer.id=2 then 1else 0 end) as gästezimmer, sum(case when zimmer.id=3 then 1 else 0 end) as schlafzimmer from regal left join zimmer on regal.zimmer=zimmer.id group by typ;
    ABER wenn nun kein Regal eines Typen in keinem der Zimmer ist, liest er mir dies nicht aus, ich hätte dann aber gerne trotzdem diese Zeile.
    Kann ich eventuell direkt hinter das Select Typ ein case Bedingung setzten oder so etwas ?


    Jemand eine Idee wie das gehen könnte ?

  • #2
    Darf man fragen, warum du nicht in deinem MySQL-Thread dazu weitermachst und es jetzt bei PHP-Einsteiger versuchst?
    Zitat von derwunner
    "Ein FISI ist auf gut-deutsch der Netzwerker. Das heißt Du gehst rauß zum Kunden oder auf die Straße und verlegst Leitungen" - derwunner 2015

    Kommentar


    • #3
      Ausserdem: falsches Unterforum. Und ev. jemand leichter lesen/ansehen, wenn du die query mal vernünftig und lesbar formatierst: http://php-de.github.io/jumpto/sql/#proaktive-manahmen
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Darf man fragen, warum du nicht in deinem MySQL-Thread dazu weitermachst und es jetzt bei PHP-Einsteiger versuchst?
        Weil ich mir gedacht habe, dass dies eher eine Frage von einem Einsteiger ist und in dem anderen Thread in einem Niveau geantwortet wurde, dass leider noch nicht meinem Wissenstand entspricht.

        Ausserdem: falsches Unterforum. Und ev. jemand leichter lesen/ansehen, wenn du die query mal vernünftig und lesbar formatierst
        Das stimmt, da hast du natürlich recht.
        Unten stehend der formatierte Code:
        PHP-Code:
        SELECT typ
               
        Sum(CASE 
                     
        WHEN zimmer.id 1 THEN 1 
                     
        ELSE 
                   end
        ) AS wohnzimmer
               
        Sum(CASE 
                     
        WHEN zimmer.id 2 THEN 1 
                     
        ELSE 
                   end
        ) AS g�stezimmer
               
        Sum(CASE 
                     
        WHEN zimmer.id 3 THEN 1 
                     
        ELSE 
                   end
        ) AS schlafzimmer 
        FROM   regal 
               LEFT JOIN zimmer 
                      ON regal
        .zimmer zimmer.id 
        GROUP  BY typ

        Und nun noch einmal zu meiner Frage:
        ABER wenn nun kein Regal eines Typen in keinem der Zimmer ist, liest er mir dies nicht aus, ich hätte dann aber gerne trotzdem diese Zeile.
        Kann ich eventuell direkt hinter das Select Typ ein case Bedingung setzten oder so etwas ?

        Kommentar


        • #5
          Hab ich das Richtig verstanden, dass du alle Zimmer aufgelistet haben möchtest unabhängig davon, ob darin Regale stehen?

          +) Wenn diese Annahme zutrifft beachte bitte, dass deine Abfrage momentan alles aus Regal nimmt und wenn vorhanden die Zimmer anhängt...
          Vllt. solltest du dir das Thema JOINS nochmals genauer anschauen.
          - Zur schnellen Hilfe: RIGHT OUTER JOIN

          -) Wenn meine Annahme nicht zutrifft, hab ich nicht gerafft was du erreichen möchtest. In dem Fall formuliere bitte deine Frage anders (auf Grund der relativ langen antwortlosen Zeit gehe ich davon aus, dass andere auch nicht verstehen, was du erreichen willst).

          Kommentar


          • #6
            Danke für deine Antwort ich werde mich mal mit dem Thema:RIGHT OUTER JOIN beschäftigen

            Kommentar


            • #7
              Für nicht existierende Elemente brauchst du einen Subselect und NOT EXISTS

              http://dev.mysql.com/doc/refman/5.1/...ubqueries.html
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                NOT EXISTS ! Der Hammer vielen Dank für die Antworten!

                Kommentar


                • #9
                  Postest du die fertige Query, damit wir sehen wie es denn im Endeffekt aussehen sollte?
                  [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                  [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                  Kommentar


                  • #10
                    Das werde ich, habe mir bisher erst einmal etwas über NOTEXIST durchgelesen und das hört sich passend an.

                    Gerade versuche ich jedoch meine regale noch einmal zu summieren.
                    das funktioniert auch, jedoch zählt er mir mit "count" keine 0 mit:

                    PHP-Code:
                    SELECT COUNT(name)from regal group by zimmer_idZimmer 
                    Gibt es eine möglichkeit eventuell zu sagen IFNULL(Count,1) oder so etwas ??

                    Kommentar

                    Lädt...
                    X