Ankündigung

Einklappen
Keine Ankündigung bisher.

IF oder CASE

Einklappen

Neue Werbung 2019

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

  • IF oder CASE

    Hallo

    In einer Spalte einer Bewertung sind Zahlen gespeichert. Diese Spalte enthält jeweils einen Wert zwischen 0 und 6.
    Berücksichtig in der Query soll der Wert nur werden, wenn er nicht 0 ist.

    Ich habe folgendes versucht:

    PHP-Code:
    $mysqli "SELECT...
    if(t1.note > 0, COUNT(t1.auftragsid),'')  AS anzahl_jobs, 
    Ziel:
    Sobald eine Bewertung vorhanden ist, die > 0 ist, soll der Einsatz gewertet (gezählt) werden. D.h. der User war an dem Auftrag beteiligt und hat eine Bewertung erhalten.

    Mein Versuch zeigt kein korrekte Ausgabe. Jemand einen Tipp für mich, wie ich die Query definieren muss?

  • #2
    Ohne kompletten Query (und Fehlermeldung) dürfte es schwer werden einen bzw. alle Fehler ausfindig zu machen.

    Kommentar


    • #3
      Die gesamte Query zu sehen wäre schon sinnvoll. Sonst, die Bedingung schon in die Where-Klausel gepackt?
      [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


      • #4
        Hier mal die komplette Query:
        PHP-Code:
        $mysql "SELECT 
        t1.note,
        SUM(t1.note) AS notentotal, 
        CASE WHEN t1.note > 0 THEN COUNT(t1.auftragsid)  END AS anzahl_jobs,
        MONTHNAME(t2.datum) AS month
        FROM 
        feedback t1 
        INNER JOIN auftrag t2 ON t1.auftragsid = t2.a_id 
        WHERE 
        YEAR(t2.datum) = '"
        .mysql_real_escape_string($year)."' 
        AND t1.persid = '"
        .mysql_real_escape_string($id)."'
        GROUP BY MONTH(t2.datum)
        "

        Kommentar


        • #5
          könntest du bitte noch die Fehlermeldung oder das Resultat posten?

          Ach und mysql_* ist veraltet und wird ab PHP 5.6 nicht mehr unterstützt. Ich empfehle einen Umstieg auf PDO (http://php.net/manual/de/book.pdo.php)

          LG
          https://github.com/Ma27
          Javascript Logic is funny:
          [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

          Kommentar


          • #6
            http://sqlfiddle.com/ mit Beispieldaten wäre ganz nützlich, dann kann man gleich rumtesten
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              Das mysql veraltet ist, ist mir bekannt. ist halt noch ein System aus früheren Zeiten...
              Fehlermeldung erhalte ich keine. Es werden einfach immer noch alle Datensätze gezählt, egal ob 0 oder grösser.
              Ich kann auch ein
              PHP-Code:
              WHERE t1.note 
              machen.
              Ich würde gerne jedoch die Lösung mit einem Select- Statement nutzen.

              Kommentar


              • #8
                Zitat von Saturnus Beitrag anzeigen
                [...] Fehlermeldung erhalte ich keine. [...]
                Ich möchte dir nicht zu Nahe treten, jedoch halte ich deine persönliche Einschätzung als "PHP-Fortgeschrittener" als zweifelsohne überrissen. Wenn du keine Fehlermeldungen bekommst, lege ich dir den Debugging-Leitfaden nahe: http://www.php.de/wiki-php/index.php...ging:Leitfaden
                [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                Kommentar


                • #9
                  Es gibt keine Fehlermeldung! Die Query liefert einen 'korrekten' Output. Nur werden so auch Datensätze selektiert die eine '0' Bewertung besitzen, trotz der 'CASE WHEN..' Anweisung. Aber egal, das Thema hat sich erledigt.
                  Danke 'grosser Meister'!

                  Kommentar


                  • #10
                    Was spricht gegen ein
                    Code:
                    WHERE
                        t1.note != 0
                    ?
                    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


                    • #11
                      Der Query ist auch unlogisch. Ohne Aggregatfunktion (z.B. COUNT, SUM usw...) ist die Spalte t1.note im SELECT quasi zufällig.
                      Ist damit also das Selbe wie:
                      PHP-Code:
                      SELECT ... if(RANDOM() > 0COUNT(t1.auftragsid),''
                      Das nächste Problem ist ein Verständnis Problem. Die Datenbank interessiert es nicht wo das COUNT() steht. Das COUNT() ist nur vom GROUP BY abhängig. Was du damit also machst ist: wenn Zufall größer 0, gib mir die Anzahl an Datensätze für "GROUP BY MONTH(t2.datum)", ansonsten ein Leerstring.
                      Was du aber willst ist die Anzahl Datensätze die t1.note > 0 haben.

                      Also reicht:
                      PHP-Code:
                      SELECT
                        MONTHNAME
                      (t2.datum) AS month,
                        
                      SUM(t1.note) AS notentotal
                        
                      COUNT(t1.auftragsid)
                      FROM
                      ...
                      WHERE
                        t1
                      .note 0
                      GROUP BY
                        
                      ... 

                      Kommentar


                      • #12
                        Zitat von Saturnus Beitrag anzeigen
                        Es gibt keine Fehlermeldung! Die Query liefert einen 'korrekten' Output. Nur werden so auch Datensätze selektiert die eine '0' Bewertung besitzen, trotz der 'CASE WHEN..' Anweisung. Aber egal, das Thema hat sich erledigt.
                        Danke 'grosser Meister'!
                        Ihm ging es dabei nicht um eine SQL-Fehlermeldung, sondern um die "MySQL deprecated"-Meldung von PHP. Wohl falsch verstanden

                        Kommentar

                        Lädt...
                        X