Ankündigung

Einklappen
Keine Ankündigung bisher.

Unterste (Letzte) Reihe einer Query "anders" schreiben

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

  • Unterste (Letzte) Reihe einer Query "anders" schreiben

    Meine Query und mein Loop sehen so aus:

    Code:
    <?php
        include "connection.php";
    
        $sql = pg_query($conn, "select case when wochentag_id = 1 then 'Montag' when wochentag_id = 2 then 'Dienstag'
            when wochentag_id = 3 then 'Mittwoch' when wochentag_id = 4 then 'Donnerstag' when wochentag_id = 5 then 'Freitag'
            when wochentag_id = 6 then 'Samstag' when wochentag_id = 7 then 'Sonntag' end, to_char(lower(oeffnungszeit), 'HH24:MI'),
                to_char(upper(oeffnungszeit), 'HH24:MI') from oeffnungszeiten where wochentag_id = wochentag_datum('2018-03-09')");
    
        while ($row = pg_fetch_row($sql)) {
        if (pg_num_rows($sql) === 1) {
            echo "Heute, an einem $row[0] haben wir einmal geöffnet, und zwar von $row[1] bis $row[2]!";
        }}
    ?>
    Mein Problem sieht wie folgt aus:
    Ich würde gerne das Ganze mit einem Beistrich fortsetzen am Ende, und den Anfang im Loop für if pg_num_rows > 1 mit last_row spielen, habe aber kaum Erfahrung damit gemacht

    Danke für mögliche Lösungswege.

    EDIT: Habe den Ansatz einer Lösung, einfach in dem ich die Reihen Counte, und dann das Ganze mit den gezählten Reihen vergleichen, bin mir aber nicht sicher, aber ja, try and error
    Ausbesserung des EDIT: Ich zähle die Reihen ja schon und vergleiche damit, also :/ hmm...


  • #2
    Warum machst du eine Schleife while() für die Ausgabe, wenn du dann mit ===1 auf gleich eins prüfst? Das widerspricht sich doch. Wenn du explizit nur einen Satz erwartest, reicht das fetch. Oder wenn du mehr erwartest dann mit > 0 prüfen.


    PHP-Code:
      echo "Heute, an einem $row[0] haben wir einmal geöffnet, und zwar von $row[1] bis $row[2]!"
    Und wo soll da der Beistrich hin? Du erwartest oben ja nur einen Datensatz. Und schreibst haben wir "einmal" geöffnet. Ganz versteh ich dich nicht ehrlich gesagt.
    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


    • #3
      Ich möchte, falls ich an einem Tag mehrere Öffnungszeiten eingetragen habe, mehrere Reihen schreiben.

      Aber ich denke, ich bin auf dem richtigen Weg, einfach eine Variable vor der while Schleife auf 1 Setzen, und jede Runde ++ zählen, und dann jede Runde mit dem ++-Wert vergleichen.

      Spiele mich aber noch

      Code sieht zurzeit so aus, ist nur Probiererei:
      Code:
      <?php
          include "connection.php";
      
          $sql = pg_query($conn, "select case when wochentag_id = 1 then 'Montag' when wochentag_id = 2 then 'Dienstag'
              when wochentag_id = 3 then 'Mittwoch' when wochentag_id = 4 then 'Donnerstag' when wochentag_id = 5 then 'Freitag'
              when wochentag_id = 6 then 'Samstag' when wochentag_id = 7 then 'Sonntag' end, to_char(lower(oeffnungszeit), 'HH24:MI'),
                  to_char(upper(oeffnungszeit), 'HH24:MI') from oeffnungszeiten where wochentag_id = wochentag_datum('2018-03-09')");
      
          echo "Hello World!";
      
          $sqlrows = pg_num_rows($sql);
      
          $i = 1;
      
          while ($row = pg_fetch_row($sql)) {
              $i++;
              if ($i === $sqlrows) {
                  echo "Asta la Vista, Rows!";
          }}
      ?>
      Funktioniert auch recht gut, wenn ich ehrlich sein darf, weil er mir auch nur einmal asta la vista, rows schreibt

      Kommentar


      • #4
        Zitat von Kampfbaer Beitrag anzeigen
        Ich möchte, falls ich an einem Tag mehrere Öffnungszeiten eingetragen habe, mehrere Reihen schreiben.
        Wie? So? Das ist doch hässlich.
        Heute, an einem Mittwoch haben wir einmal geöffnet, und zwar von 10:00 bis 12:00!
        Heute, an einem Mittwoch haben wir einmal geöffnet, und zwar von 14:00 bis 16:00!
        Schreib doch besser sowas (wenn du es "blumig" magst):

        Heute, Mittwoch haben wir für Sie von 10:00 bis 12:00 und von 14:00 bis 16:00 Uhr geöffnet.
        oder

        Heute, Mittwoch haben wir für Sie geöffnet:
        10:00 - 12:00 Uhr
        14:00 - 16:00 Uhr
        Dann ersparst du dir auch das ersetzen von "einmal" und auch die Ausgabe ist einfacher.

        Die Übersetzung der Wochentage würde ich übrigens in PHP machen und nicht in der DB. Aber das ist wohl auch Geschmackssache.
        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


        • #5
          Danke, habe schon eine (für mich, Geschmäcker sind verschieden, auch ein wenig den Ausdruck geändert, wegen dir), Lösung:
          Code:
          <?php
              include "connection.php";
          
              $sql = pg_query($conn, "select case when wochentag_id = 1 then 'Montag' when wochentag_id = 2 then 'Dienstag'
                  when wochentag_id = 3 then 'Mittwoch' when wochentag_id = 4 then 'Donnerstag' when wochentag_id = 5 then 'Freitag'
                  when wochentag_id = 6 then 'Samstag' when wochentag_id = 7 then 'Sonntag' end, to_char(lower(oeffnungszeit), 'HH24:MI'),
                      to_char(upper(oeffnungszeit), 'HH24:MI') from oeffnungszeiten where wochentag_id = wochentag_datum('2018-03-09')");
          
              $sqlrows = pg_num_rows($sql);
          
              $i = 0;
          
              while ($row = pg_fetch_row($sql)) {
                  $i++;
                  if ($i === 1) {
                      echo "Wir haben heute, einem $row[0] ";
                  }    if ($i < $sqlrows) {
                      echo "von $row[1] bis $row[2], ";
                  }    if ($i === $sqlrows) {
                      echo "und von $row[1] bis $row[2] geöffnet!";
              }}
          ?>
          Ausgabesatz (Bei 3 Öffnungszeiten):
          Wir haben heute, einem Freitag von 08:00 bis 12:00, von 14:00 bis 20:00, und von 20:00 bis 22:00 geöffnet!

          Und ja, ich bin voller Fan von Datenbanken

          Anbei hier das Schlagwort, wo ich draufkommen musste, weil ich es ja eig nur auf einer Online-Plattform, wo ich nur schnell Antworten durchklicken musste, gekannt habe:
          Fortlaufender Integer in While Schleifen ^^

          Kommentar


          • #6
            von 14:00 bis 20:00, und von 20:00 bis 22:00 geöffnet!
            also von 14:00 bis 22:00 Uhr!
            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


            • #7
              Vor "und" gehört kein Beistrich.

              Kommentar


              • #8
                ist aber nicht verboten

                Kommentar


                • #9
                  Aber grammatikalisch falsch. Willst Du so vor Kunden auftreten?
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche Tutorials

                  Kommentar


                  • #10
                    Und Uhr fehlt eigentlich auch noch.

                    Zitat von hausl
                    von 14:00 bis 22:00 Uhr
                    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


                    • #11
                      Ja, ich bin eigentlich nicht verpflchtet, sowas zu tun

                      Meine Mutter hat halt entsprechend letztes Jahr, (also schon ein wenig über 1 Jahr her), ein Cafe aufgemacht, wo man Nähen lernen kann, wenn mans kann nähen, und so weiter.
                      Sie meint immer, sie braucht keine, aber ja. Habe halt viel Freizeit, wenn es jemand interssiert, warum, dann bitte per PN.

                      Ich arbeite, wie manche wohl schon wissen, mit einer PostgreSQL-Datenbank, und bastel abwechselnd mal so mal so an der Datenbank, oder auch an der Homepage.

                      Zusammenfassung:
                      Ich programmiere aus Spaß, nicht aus einer Verpflichtung.

                      Kommentar


                      • #12
                        Problem gelöst:
                        Ich habe zwar nicht den Wochtentag drinnen stehen, aber auch egal. Wissen welcher Tag ist, weiß ich nicht, in wiefern das verpflichtend ist :/

                        Hier die Lösung:
                        Code:
                        <?php
                            include "../connection.php";
                        ?>
                        <?php
                            $i = 0;
                        
                            $sql = pg_query($conn, "select case when wochentag_id = 1 then 'Montag' when wochentag_id = 2 then 'Dienstag' when wochentag_id = 3
                                then 'Mittwoch' when wochentag_id = 4 then 'Donnerstag' when wochentag_id = 5 then 'Freitag' when wochentag_id = 6 then 'Samstag' end,
                            lower(oeffnungszeiten.oeffnungszeit), upper(oeffnungszeiten.oeffnungszeit)
                                        from oeffnungszeiten where wochentag_id = wochentag_datum('2018-03-09')");
                        
                            $sqlrows = pg_num_rows($sql);
                        
                            $i = 0;
                        
                            echo "Wir haben heute";
                            while ($row = pg_fetch_row($sql)) {
                                if ($i < $sqlrows) {
                                    echo " von $row[1] bis $row[2]";
                                    $i++;
                                    if ($i < $sqlrows-1) {
                                        echo ", ";
                                    }
                            } if ($i === $sqlrows-1) {
                                echo " und ";
                            }
                            }
                                echo " geöffnet!";
                        ?>
                        Ergebniss:
                        Wir haben heute von 08:00:00 bis 12:00:00, von 14:00:00 bis 20:00:00, von 00:00:00 bis 07:45:00 und von 21:00:00 bis 23:45:00 geöffnet!

                        Die Zeitwerte werde ich noch mittels einem to_char anpassen
                        Ein Order by auch noch xD

                        EDIT:
                        Hier die Lösung mit Wochentagen und den to_char Änderungen:
                        Code:
                        <?php
                            $i = 0;
                        
                            $sql = pg_query($conn, "select case when wochentag_id = 1 then 'Montag' when wochentag_id = 2 then 'Dienstag' when wochentag_id = 3
                                then 'Mittwoch' when wochentag_id = 4 then 'Donnerstag' when wochentag_id = 5 then 'Freitag' when wochentag_id = 6 then 'Samstag' end,
                            to_char(lower(oeffnungszeiten.oeffnungszeit), 'HH24:MI'), to_char(upper(oeffnungszeiten.oeffnungszeit), 'HH24:MI')
                                        from oeffnungszeiten where wochentag_id = wochentag_datum('2018-03-09') order by lower(oeffnungszeit)");
                        
                            $sqlrows = pg_num_rows($sql);
                        
                            $i = 0;
                        
                            echo "Wir haben heute ";
                            while ($row = pg_fetch_row($sql)) {
                                if ($i === 0) {
                                    echo "an einem $row[0]";
                                }
                                if ($i < $sqlrows) {
                                    echo " von $row[1] bis $row[2]";
                                    $i++;
                                    if ($i < $sqlrows-1) {
                                        echo ", ";
                                    }
                            } if ($i === $sqlrows-1) {
                                echo " und ";
                            }
                            }
                                echo " geöffnet!";
                        ?>
                        Result: Wir haben heute an einem Freitag von 00:00 bis 07:45, von 08:00 bis 12:00, von 14:00 bis 20:00 und von 21:00 bis 23:45 geöffnet!

                        Warum soviel? Ich wollte nur probieren, obs auch geht, falls mal öfter als nur 2 mal offen ist. Werde ich in der Datenbank mal eben wieder ausbessern.

                        Kommentar

                        Lädt...
                        X