Ankündigung

Einklappen
Keine Ankündigung bisher.

datetime

Einklappen

Neue Werbung 2019

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

  • #16
    Jedes Gebot muss einen Zeitstempel speichern, dann kannst du einfach danach sortieren.

    Notlösung: Primary Key, der wird von der Datenbank hochgezählt und in der Regel sollte der niedrigste PK auch der sein, der zuerst reinkam...
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #17
      Zitat von akretschmer Beitrag anzeigen
      was willst du prüfen?
      Ob User zuerst den Betrag geboten hat.

      Kommentar


      • #18
        Zitat von lstegelitz Beitrag anzeigen
        Jedes Gebot muss einen Zeitstempel speichern, dann kannst du einfach danach sortieren.

        Notlösung: Primary Key, der wird von der Datenbank hochgezählt und in der Regel sollte der niedrigste PK auch der sein, der zuerst reinkam...
        Aber wie ist der Befehl für WHERE timestamp = kleinste?

        Kommentar


        • #19
          Zitat von hausl Beitrag anzeigen
          Grundsätzlich mal kannst du wenn der Datentyp stimmt danach Sortieren. Dann ist der aktuellste Datensatz einer Auktion mit LIMIT 1 (MySQL) und DESC der akutelleste. Dann gibts noch Filter (WHERE) auf den User und so weiter.
          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


          • #20
            ORDER BY timestamp gibt dir die Reihenfolge an, dabei gilt ASC als Aufsteigend, also kleinstes Datum zuerst und DESC als absteigend, wenn du das Neueste Datum brauchst.
            Damit solltest du doch klarkommen.

            Ansonsten stell das mal als SQLfiddle zur Verfügung.

            Kommentar


            • #21
              tl;dr

              wenn Du das nach dem Timestamp (oder dauer) passend sortierst mit LIMIT 1, kannst das Result prüfen, ob das der entsprechende User ist.

              Code:
              andreas@[local]:5432/test# create table gebote (id serial primary key,ts timestamp, usr int);
              CREATE TABLE
              andreas@[local]:5432/test*# insert into gebote select s, '2018-01-01'::timestamp + random()*10000*'1hour'::interval,s%10 from generate_series(1,1000)s;
              INSERT 0 1000
              andreas@[local]:5432/test*# with x as (select * from gebote order by ts limit 1) select * from x;
               id  |             ts             | usr
              -----+----------------------------+-----
               522 | 2018-01-01 03:11:24.531686 |   2
              (1 row)
              
              andreas@[local]:5432/test*# with x as (select * from gebote order by ts limit 1) select count(1) from x where usr=2;
               count
              -------
                   1
              (1 row)
              
              andreas@[local]:5432/test*# with x as (select * from gebote order by ts limit 1) select count(1) from x where usr=3;
               count
              -------
                   0
              (1 row)
              ch Dir zur Übung.
              andreas@[local]:5432/test*#
              Damit kannst also prüfen, ob User=2 oder 3 in diesem Falle derjenige ist, der das letzte Gebot abgegeben hat. Sortierung nach DESC umzustellen überlasse ich Dir zur Übung.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #22
                Zitat von protestix Beitrag anzeigen
                ORDER BY timestamp gibt dir die Reihenfolge an, dabei gilt ASC als Aufsteigend, also kleinstes Datum zuerst und DESC als absteigend, wenn du das Neueste Datum brauchst.
                Damit solltest du doch klarkommen.

                Ansonsten stell das mal als SQLfiddle zur Verfügung.
                Ich komm mit SQLfiddle nicht zurecht.

                Das ist der zu ergänzende Code:

                Code:
                $sql = "SELECT gebote.angebot_id, gebote.kunde, gebote.preiseingabe, gebote.date, MIN(date),
                  MAX(preiseingabe), angebote.titel, angebote.Auktionsnummer, angebote.dauer
                FROM
                  gebote
                  LEFT JOIN angebote ON
                    gebote.angebot_id = angebote.Auktionsnummer WHERE timediff(now(), angebote.dauer) > 0 AND now() BETWEEN datum AND timediff(now(), angebote.datum) < 91 AND gebote.kunde = '{$user}' GROUP BY angebot_id, kunde, preiseingabe, date, titel, Auktionsnummer, dauer ORDER BY dauer DESC";

                Kommentar


                • #23
                  Danach folgt eine Schleife...

                  PHP-Code:
                  <?php $result $pdo->prepare($sql); 
                              
                  $result->execute(); 
                              
                  $number_of_rows $result->fetchColumn();

                          if (
                  $number_of_rows 0){

                      
                  $result $pdo->query($sql);  ?>


                          <ul>
                              <?php            

                  foreach ($result as $reihe):

                      
                  $preis $reihe['preiseingabe'];
                          
                  $preiseingabe number_format($preis2","".");

                              
                  ?>

                      <li>

                          <a href="https://www.mehr-bieten.de/win?Auktionsnummer=<?php echo $reihe['Auktionsnummer'];?>"><?= htmlspecialchars($reihe['titel'], ENT_COMPAT'UTF-8'?><span> (</span><?= htmlspecialchars($preiseingabeENT_COMPAT'UTF-8'?><span> EUR)</span>
                              </a><?php endforeach;}else{?><p>Es wurde nichts erworben.</p><?php ?>

                  Kommentar


                  • #24
                    Zitat von king-ich Beitrag anzeigen

                    Ich komm mit SQLfiddle nicht zurecht.

                    Das ist der zu ergänzende Code:
                    SQLfiddle klemmt einfach manchmal. Vermutlich überlastet, alle nutzen es, keiner bezahlt es ...
                    Ansonsten wäre es doch bei Deinen Ambitionen nicht verkehrt, wenigstens schon mal mit sqlfiddle klar zu kommen oder?
                    Schau dir notfalls mal ein Beispiel an, ist nicht so schwer zu verstehen das Prinzip.

                    Was jedenfalls selten in einem Forum wie diesem hilft, Codeteile zu posten nach dem Motto:
                    Ihr versteht schon/ bitte ergänzen.

                    Da gibt es mindestens einen grundlegenden Fehler in der Herangehensweise:
                    Fehlerhafter und unvollständiger Code ist nicht selbsterklärend.

                    Unter uns:
                    Nicht mal funktionierender Code sagt etwas über die Absichten des Programmierers.

                    Mal konkret zu Deinem Code:
                    Du redest immer von der Sortierung, aber wieso schränkst Du Dein Select Statement, von dem ich annehme, dass es das höchste Gebot zeigen soll auf einen User ein?
                    Das Statement mit Group By eignet sich außerdem wahrscheinlich nicht für eine schnelle Online Nutzung.

                    Kommentar


                    • #25
                      Du redest immer von der Sortierung, aber wieso schränkst Du Dein Select Statement, von dem ich annehme, dass es das höchste Gebot zeigen soll auf einen User ein?
                      Der Code ist auf der Seite die nur für den User ist (Login Bereich).

                      Und da soll er sehen ob er gewonnen hat oder nicht.

                      Kommentar


                      • #26
                        Falls jemanden die Lösung interessiert:

                        Code:
                        WHERE date = (SELECT MIN(date) FROM gebote)

                        Kommentar

                        Lädt...
                        X