Christoph Schnauß: Array trennen

hallo Forum,

ich habe ein Array, das ziemlich viele Elemente enthält. Daher will ich ihn immer nur teilweise ausgeben, also aufsplitten. Prinzipiell kann ich das ungefähr so machen:
  $temp1 = array_slice($temp, -50, 50); // ergibt Elemente 1 - 50
  $temp2 = array_slice($temp, -100, 50); // ergibt Elemente 51 - 100
  $temp3 = array_slice($temp, -150, 50); // ergibt Elemente 101 - 150
  $temp4 = array_slice($temp, -200, 50); // ergibt Elemente 151 - 200
  $temp5 = array_slice($temp, -250, 50); // ergibt Elemente 201 - 250
usw.
Da gibt es aber ein Problem: array_slice() zählt immer vom letzten Element an (das ist hier das mit der Nummer 1), und vergleichbare PHP-Funktionen bzw. -Sprachkonstrukte tun das auch. Wenn mein Array nun aber 280 Elemente enthält, bekomme ich mit
  $temp6 = array_slice($temp, -300, 50);
die Elemente 231 - 280, und das bedeutet, daß in diesem Beispiel sowohl in $temp6 wie auch in $temp5 die Elemente 231 - 250 enthalten sind, sie sind also doppelt vorhanden. Mein Array $temp ist variabel, das heißt, von Benutzereingaben und anderem Krempel abhängig, er kann also mal etwas mehr, mal etwas weniger Elemente enthalten, und die genaue Zahl ist mir nicht unbedingt bekannt. Wie kriege ich das nun hin, daß im letzten Teil - hier also $temp6 - tatsächlich nur die Elemente ab Element 251 stehen, wenn ich doch nicht genau weiß, wieviele das noch sind?

Grüße aus Berlin

Christoph S.

--
Visitenkarte
ss:| zu:) ls:& fo:) va:) sh:| rl:|
  1. Hallo Freunde des gehobenen Forumsgenusses,

    $temp1 = array_slice($temp, -50, 50); // ergibt Elemente 1 - 50
      $temp2 = array_slice($temp, -100, 50); // ergibt Elemente 51 - 100
      $temp3 = array_slice($temp, -150, 50); // ergibt Elemente 101 - 150
      $temp4 = array_slice($temp, -200, 50); // ergibt Elemente 151 - 200
      $temp5 = array_slice($temp, -250, 50); // ergibt Elemente 201 - 250
    Wie kriege ich das nun hin, daß im letzten Teil - hier also $temp6 - tatsächlich nur die Elemente ab Element 251 stehen, wenn ich doch nicht genau weiß, wieviele das noch sind?

    Pack das ganze in eine Schleife (irgendwie so):

      
    $tempneu = array();  
    $count = 0;  
    while ($count < count($temp)) {  
     $tempneu[] = array_slice($temp, -$count, 50);  
     $count += 50;  
    }  
    
    

    Das geht dann auch mit beliebig vielen Einträgen in $temp und ist nicht so redundant (ungetestet).

    Gruß
    Alexander Brock

    1. hallo Alexander,

      Das [...] ist nicht so redundant (ungetestet).

      Du Schlingel!
      ;-)
      Die Sache mit der Redundanz war der eigentliche Hintergrund meiner Frage ...

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
  2. Moin!

    ich habe ein Array, das ziemlich viele Elemente enthält. Daher will ich ihn immer nur teilweise ausgeben, also aufsplitten.

    Welchen Vorteil bringt das?

    Damit du das komplette Array in Teile zerlegen kannst, benötigst du zuallererst mal... das komplette Array! Welches den kompletten Platz an Speicher verbraucht! Wo kommt das her?

    $temp1 = array_slice($temp, -50, 50); // ergibt Elemente 1 - 50
      $temp2 = array_slice($temp, -100, 50); // ergibt Elemente 51 - 100
      $temp3 = array_slice($temp, -150, 50); // ergibt Elemente 101 - 150
      $temp4 = array_slice($temp, -200, 50); // ergibt Elemente 151 - 200
      $temp5 = array_slice($temp, -250, 50); // ergibt Elemente 201 - 250

    Und mit dieser sehr sinnlos anmutenden Prozedur verdoppelst du den Speicherbedarf (zumindest zeitweise) noch, indem das Array sinnlos stückchenweise kopiert wird.

    Und am Ende stehst du statt mit genau einer Arrayvariablen, die man problemlos in einer Schleife komplett oder teilweise ausgeben könnte, mit einer unbekannten Anzahl von Einzelstücken da, und mußt obendrein eben noch das Problem lösen, zur Laufzeit in Abhängigkeit von der Arraygröße dynamisch Variablennamen zu erzeugen und denen die Bruchstücke zuzuweisen.

    Die viel bessere Methode für sowas wäre, ein Array zu nehmen. Was die ganze Sinnlosigkeit des Vorhabens zeigt, denn was ist besser an $temparray[2][50], als an $temp[100]?

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. hallo Sven,

      Welchen Vorteil bringt das?

      Nimm an, daß die "Elemente" aus jeweils sehr viel HTML bestehen und bei einer kompletten Darstellung auf einer Seite das Ganze einfach zu unübersichtlich wird.

      Damit du das komplette Array in Teile zerlegen kannst, benötigst du zuallererst mal... das komplette Array!

      Habe ich.

      Welches den kompletten Platz an Speicher verbraucht!

      Nur solange es existiert. Habe ich den Teil rausgeschnipselt, den ich haben will, kann ich den zugehörigen Prozeß beenden und der Speicherplatz wird keineswegs "komplett" verbraucht.

      Die viel bessere Methode für sowas wäre, ein Array zu nehmen.

      Aha. Was meinst du denn, was ich tun will?

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      1. Moin!

        Welchen Vorteil bringt das?

        Nimm an, daß die "Elemente" aus jeweils sehr viel HTML bestehen und bei einer kompletten Darstellung auf einer Seite das Ganze einfach zu unübersichtlich wird.

        Diese Erklärung erleichtert das Verständnis noch nicht.

        Was steht im Array drin? Strings?

        Und wo kommen die her? Warum kommen die alle in einem riesigen Array daher? Warum willst du das Array zerkleinern und dann ausgeben? Warum nicht einfach nur den relevanten/gewünschten Teil ausgeben, und fertig? Warum nicht von vornherein nur den relevanten/gewünschten Teil in das Array hineintun?

        Welches den kompletten Platz an Speicher verbraucht!

        Nur solange es existiert. Habe ich den Teil rausgeschnipselt, den ich haben will, kann ich den zugehörigen Prozeß beenden und der Speicherplatz wird keineswegs "komplett" verbraucht.

        Also ist auch noch IPC beteiligt? In welcher Form?

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. hallo Sven,

          Warum nicht einfach nur den relevanten/gewünschten Teil ausgeben, und fertig?

          Genau das will ich tun.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
    2. Hallo Freunde des gehobenen Forumsgenusses,

      ich habe ein Array, das ziemlich viele Elemente enthält. Daher will ich ihn immer nur teilweise ausgeben, also aufsplitten.

      Welchen Vorteil bringt das?

      50 Zitate pro Seite sind übersichtlicher und schneller geladen als alle Zitate auf einer Seite.

      Damit du das komplette Array in Teile zerlegen kannst, benötigst du zuallererst mal... das komplette Array! Welches den kompletten Platz an Speicher verbraucht! Wo kommt das her?

      Das kommt aus dem RDBMS PostgreSQL.

      @Christoph:

      Wenn du die Zitate 101 bis 150 haben willst geht das nicht so:

        
      $temp = array_slice(Datenbank::getInstance()->getZitate(), -150, 50);  
      
      

      Sondern so:

        
      $temp = Datenbank::getInstance()->getZitate(101, 50);  
      
      

      Das führt dann direkt dazu, dass die Verwendung des RDBMS überhaupt einen Vorteil bietet und die Anwendung vernünftig (= logarithmisch) skaliert.

      Gruß
      Alexander Brock

      1. Moin!

        Hallo Freunde des gehobenen Forumsgenusses,

        ich habe ein Array, das ziemlich viele Elemente enthält. Daher will ich ihn immer nur teilweise ausgeben, also aufsplitten.

        Welchen Vorteil bringt das?

        50 Zitate pro Seite sind übersichtlicher und schneller geladen als alle Zitate auf einer Seite.

        Hurra, endlich gibts mal Informationen - keine Ahnung, warum Christoph da so zurückhaltend ist und nicht verrät, was Sache ist. So kann man nämlich nicht helfen.

        Damit du das komplette Array in Teile zerlegen kannst, benötigst du zuallererst mal... das komplette Array! Welches den kompletten Platz an Speicher verbraucht! Wo kommt das her?

        Das kommt aus dem RDBMS PostgreSQL.

        Dann fragt man einfach nur den benötigten Teil der Datenbank ab. Und schon hat man von Anfang an weniger Daten im Array.

        Oder es sollen tatsächlich immer alle Daten eingelesen werden - dann kann man sich das Zerteilen des Arrays meiner Meinung nach wirklich schenken, und einfach nur direkt den gewünschten Teil ausgeben.

        Aber ich denke, das ist hiermit auch gemeint:

        $temp = Datenbank::getInstance()->getZitate(101, 50);

          
         - Sven Rautenberg
        
        -- 
        My sssignature, my preciousssss!
        
        1. Hallo Freunde des gehobenen Forumsgenusses,

          Das kommt aus dem RDBMS PostgreSQL.

          Dann fragt man einfach nur den benötigten Teil der Datenbank ab. Und schon hat man von Anfang an weniger Daten im Array.

          $temp = Datenbank::getInstance()->getZitate(101, 50);

            
          Genau das tut die Methode getZitate, wenn man die passenden Parameter übergibt.  
            
          Gruß  
          Alexander Brock
          
          -- 
          ![A](http://alexanderbrock.de/img/pavatar.png)  
          [VLinkchecker - Ein Klasse in PHP, die Websites rekursiv abruft und nach kaputten Links sucht.](http://alexanderbrock.de/vlinkchecker/)
          
        2. hallo Sven,

          keine Ahnung, warum Christoph da so zurückhaltend ist

          An sich betrifft es ein Problem, das tatsächlich bei der aktuellen Entwicklungsarbeit an der künftigen Zitatesammlung zutagegetreten ist - nur diskutieren wir darüber intern, und ich mag nicht jedes intern zu lösende Problemchen nach außen tragen. Das gehört sich einfach nicht. Zugriff aufs SVN hast du vermutlich, so daß du leicht nachschauen kannst, um welche konkrete Datei es geht.
          Allerdings arbeiten wir an einer Softwarelösung, die explizit auf das Forum hier zugeschnitten wird und sowieso Open Source werden soll. Also ist es auch nicht so schlimm, wenn zwischendurch mal ein Schrittchen der Problemdiskussion sichtbar wird, die ja letzten Endes zu einem für das Forum nutzbaren Feature führen soll.

          Andrerseits hatte ich genau so ein "Sortierproblem" auch schon bei (mindestens) einem anderen Projekt, wobei da keine DB zur Verfügung stand, sondern eine XML-Datei. Also hielt ich es für eine Frage, vor der sich der eine oder andere auch schonmal gestellt gesehen haben mag, so daß es eine vielleicht etwas allgemeinere Frage wäre. "Sortierprobleme" bei Arrays sind vermutlich gar nicht so selten. Und nicht immer ist sort() der Königsweg.

          Und schließlich sieht es nach meinem gewiß unvollkommenen Überblick so aus, als ob bei Sortiervorgängen für Arrays in allen Array-Funktionen immer "von hinten" her gezählt wird. Man kann einen Array numerisch oder alphabetisch neu sortieren, man kann ihn auseinanderschnipseln und neu zusammensetzen, aber bei allen Operationen "von - bis", die ich bisher wirklich kenne, wird vom letzten Wert her gezählt. Wenn du mich da korrigieren und zeigen könntest, daß ich bloß irgendwas bisher nicht richtig nachgelesen/gelernt habe, wäre der etwas harsche Ton deiner ersten Antwort deutlich entschärft.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
          1. Moin!

            Andrerseits hatte ich genau so ein "Sortierproblem" auch schon bei (mindestens) einem anderen Projekt, wobei da keine DB zur Verfügung stand, sondern eine XML-Datei. Also hielt ich es für eine Frage, vor der sich der eine oder andere auch schonmal gestellt gesehen haben mag, so daß es eine vielleicht etwas allgemeinere Frage wäre. "Sortierprobleme" bei Arrays sind vermutlich gar nicht so selten. Und nicht immer ist sort() der Königsweg.

            Egal um welches Problem es sich dreht: Dein Ansatz, zuerst mal alle Daten in ein großes Array einzulesen, um das dann zu zerteilen, weil nur ein Teilbereich im gleichen Skript weiterverarbeitet werden soll, ist blödsinnig.

            Entweder steht genug Speicherplatz für dieses große Array zur Verfügung - dann kann man direkt die gewünschten Arrayelemente verarbeiten, und den Rest verwirft man am Skriptende einfach ungenutzt.

            Oder man stößt auf Speicherprobleme bzw. möchte diese von Anfang an vermeiden - dann ist man gezwungen, schon direkt das Erstellen eines großen Arrays zu verhindern, und sich ausschließlich den gewünschten Datenbereich in das Array zu holen. Was dann natürlich auch die Aufgabe erübrigt, sich hinterher irgendeinen Teilbereich dieses Arrays herauszusuchen, weil es schon eine Teilmenge ist.

            Und diese Grundsätze gelten vollkommen unabhängig davon, wo die Daten denn herkommen. Lediglich die Methode, nur einen Teilbereich der Daten einzulesen, unterscheidet sich: Eine Datenbank bietet in der Regel passende SQL-Befehle an, eine XML-Datei muß passend geparst werden, und sollten die Inhalte z.B. aus Dateien kommen, wären nur die relevanten Dateien einzulesen, oder nur die zu speichern, die benutzt werden sollen, so dass zu jeder Zeit nur für n+1 Dateien (n = Anzahl der zu nutzenden Dateien im Speicher) Platz existieren muß.

            Was deine Aussage zu sort() angeht, stimme ich nicht zu. sort() ist, sofern man ein PHP-Array hat, sicherlich eine der schnellsten Methoden, etwas zu sortieren. Nur: Du hast hier kein Sortierproblem, denn die Daten der Zitatesammlung sind bereits sortiert.

            Und schließlich sieht es nach meinem gewiß unvollkommenen Überblick so aus, als ob bei Sortiervorgängen für Arrays in allen Array-Funktionen immer "von hinten" her gezählt wird.

            Sortierfunktionen bearbeiten das gesamte Array. Da wird nichts "gezählt".

            Man kann einen Array numerisch oder alphabetisch neu sortieren, man kann ihn auseinanderschnipseln und neu zusammensetzen, aber bei allen Operationen "von - bis", die ich bisher wirklich kenne, wird vom letzten Wert her gezählt. Wenn du mich da korrigieren und zeigen könntest, daß ich bloß irgendwas bisher nicht richtig nachgelesen/gelernt habe, wäre der etwas harsche Ton deiner ersten Antwort deutlich entschärft.

            Mal als Beispiel (und deutlich angemerkt: Hier geht es NICHT um's Sortieren):
            http://www.php.net/array_slice
            array_slice
            (PHP 4, PHP 5)
            Extrahiert einen Ausschnitt eines Arrays

            Beschreibung
            array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )

            array_slice() liefert die mittels offset und length spezifizierte Sequenz von Elementen des Arrays array.

            Ist offset nicht negativ, beginnt die Sequenz bei diesem Offset in dem array. Ist offset negativ, beginnt die Sequenz offset Elemente vor dem Ende von array.

            Ist length positiv, enthält die Sequenz genauso viele Elemente. Ist length negativ, enthält die Sequenz alle Elemente des Arrays von offset bis length Elemente vor dem Ende des Arrays. Ist length nicht angegeben, enthält die Sequenz alle Elemente von offset bis zum Ende von array.

            Mit anderen Worten: Man nehme einfach positive Werte, und schon zählt array_slice() vom Anfang des Arrays. array_slice($array,0,3) liefert die Array-Elemente 0, 1 und 2 (3 Stück). Siehe dazu auch die Beispiele.

            - Sven Rautenberg

            --
            My sssignature, my preciousssss!
            1. hallo Sven,

              Mal als Beispiel (und deutlich angemerkt: Hier geht es NICHT um's Sortieren):
              http://www.php.net/array_slice

              Nein, da gehts nicht ums Sortieren, sondern um etwas, was _danach_ folgen kann oder soll. Du mußt auch nicht unbedingt soviele Zeilen aus dem Handbuch zitieren - naja, nicht für mich, das Handbuch konsultiere ich relativ häufig. Für den einen oder anderen, der einem Verweis nicht folgen kann, mags sinnvoll sein ...

              Mit anderen Worten: Man nehme einfach positive Werte, und schon zählt array_slice() vom Anfang des Arrays. array_slice($array,0,3) liefert die Array-Elemente 0, 1 und 2 (3 Stück). Siehe dazu auch die Beispiele.

              Schön wärs. Nach meinen bisherigen Erfahrungen (die sich nicht allein auf die Entwicklerei bei der Zizatesammlung stützen) ist das zumindest fragwürdig. In der Regel scheitert es daran, daß die "PHP-Logik" irgendwas andres als "Anfang des Arrays" ansieht, als sich erwarten läßt.

              Grüße aus Berlin

              Christoph S.

              --
              Visitenkarte
              ss:| zu:) ls:& fo:) va:) sh:| rl:|
              1. Moin!

                Mal als Beispiel (und deutlich angemerkt: Hier geht es NICHT um's Sortieren):
                http://www.php.net/array_slice

                Nein, da gehts nicht ums Sortieren, sondern um etwas, was _danach_ folgen kann oder soll.

                Das Ausschneiden eines Arrayteils hat mit dem Sortieren nichts zu tun - mit Ausnahme deiner speziellen Lösung des aktuellen Problems vielleicht.

                Mit anderen Worten: Man nehme einfach positive Werte, und schon zählt array_slice() vom Anfang des Arrays. array_slice($array,0,3) liefert die Array-Elemente 0, 1 und 2 (3 Stück). Siehe dazu auch die Beispiele.

                Schön wärs. Nach meinen bisherigen Erfahrungen (die sich nicht allein auf die Entwicklerei bei der Zizatesammlung stützen) ist das zumindest fragwürdig.

                Wenn die Funktion im Widerspruch zu ihrer Beschreibung arbeitet, ist das ein Bug und sollte gemeldet werden.

                In der Regel scheitert es daran, daß die "PHP-Logik" irgendwas andres als "Anfang des Arrays" ansieht, als sich erwarten läßt.

                PHP sieht das erste Element eines Arrays als "Anfang des Arrays" an. Das ist nicht zwingend das Element mit dem kleinsten Key. Und es ist auch nicht zwingend das Element mit dem Key 0, auch wenn dieser Key existiert. PHP verwaltet ein Array als Liste - irgendeines der Elemente ist das erste, dann folgen weitere, und eines ist das letzte Element. Ein wenig Sonderbehandlung gibts, wenn numerische Indizes verwendet werden, alphanumerische Schlüssel hingegen werden einfach hinten an die Liste angehängt, wenn sie erstellt werden.

                Die aktuelle Reihenfolge läßt sich mit var_dump, print_r, foreach und Konstrukten, die reset(), next(), prev() bzw. each() enthalten, ermitteln und nutzen.

                Die Listeneigenschaft erlaubt es, Konstruktionen zu erstellen, die auf den ersten Blick widersinnig erscheinen: Ein zweidimensionales Array mit den zwei Informationen "Nachname" und "Vorname" wird man, wie man es von anderen Sprachen gewohnt ist, wohl so ablegen:

                  
                $namen[0]['vorname']='Sven';  
                $namen[0]['nachname']='Rautenberg';  
                  
                $namen[1]['vorname']='Christoph';  
                $namen[1]['nachname']='Schnauss';  
                
                

                Will man diese Liste sortieren, muß man sich entscheiden: Zuerst Nachnamen, oder zuerst Vornamen? In jedem Fall ist eine benutzerdefinierte Sortierfunktion notwendig, die die einzelnen Elemente [0]... als Array entgegennimmt und mit dem Inhalt des Schlüssels ['vorname'] oder ['nachname'] (oder auch kombiniert) einen Stringvergleich macht.

                Es geht aber auch umgekehrt:

                  
                $namen['vorname'][0]='Sven';  
                $namen['nachname'][0]='Rautenberg';  
                  
                $namen['vorname'][1]='Christoph';  
                $namen['nachname'][1]='Schnauss';  
                
                

                Sortieren nach Nachname und Vorname läuft getrennt voneinander!

                  
                $namen['vorname'] = asort($namen['vorname']);  
                $namen['nachname'] = asort($namen['nachname']);  
                
                

                Jetzt einfach mal var_dump() drüberlaufen lassen...

                - Sven Rautenberg

                --
                My sssignature, my preciousssss!
      2. hallo Alexander,

        Das führt dann direkt dazu, dass [...] die Anwendung vernünftig (= logarithmisch) skaliert.

        Die Logik ergibt sich daraus, daß in der aufgerufenen Funktion
          function getZitate($start = false, $limit = false)
        steht. Die Zählung beginnt aber am "falschen" Ende, man müßte eigentlich die ganzen DB-Einträge "umdrehen". Dein Vorschlag mit
          $temp = Datenbank::getInstance()->getZitate(101, 50);
        liefert im Moment genau die Einträge 172 - 123. Sobald ein Eintrag dazukommt, wird das zu 173 - 124. Und da ich in der aufgerufenen Funktion getZitate() nicht herumschnipseln wollte (das ist deine), habe ich zunächst Array-Funktionen probiert - es gibt da auch noch andere als array_slice(). Außerdem habe ich eine vergleichbare Problemstellung schonmal bei einem anderen Projekt erlebt, bei dem ich auf die Art, wie die Daten ausgelesen wurden, keinen Zugriff hatte.

        In getZitate erfolgt die Sortierung der DB-Einträge mit
          'texte order by datum, id desc';.
        Wenn man das nach
          'texte order by id, datum desc';
        ändert, beginnt die Zählung an der "richtigen" Stelle.

        Solange die Sortierung als vorgegeben angesehen wird, liefert der Bereich (-x, 50) zwar tatsächlich 50 Einträge, nur lassen sich Start und Ende dieses Ausschnitts nicht genau festlegen. Das heißt, ich konnte es nicht, aber immerhin war ja wohl an der Herangehensweise irgendwas nicht korrekt. Und wenn man den Grund dafür nicht findet, muß man entweder Holunder ernten gehen (den gibts bloß noch nicht) oder eben jemanden wie das Forum fragen.

        ;-)

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. hi,

          In getZitate erfolgt die Sortierung der DB-Einträge mit
            'texte order by datum, id desc';.
          Wenn man das nach
            'texte order by id, datum desc';
          ändert, beginnt die Zählung an der "richtigen" Stelle.

          Dass eine ID aber _ausschließlich_ zum eindeutigen Identifizieren eines Datensatzes dient, und ganz bestimmt _nicht_ dazu, irgendeine Art von Sortierung herzustellen - muss man dir doch hoffentlich nicht noch erklären ...?

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. hallo wahsaga,

            Dass eine ID aber _ausschließlich_ zum eindeutigen Identifizieren eines Datensatzes dient, und ganz bestimmt _nicht_ dazu, irgendeine Art von Sortierung herzustellen - muss man dir doch hoffentlich nicht noch erklären ...?

            Im Handbuch kannst du unter anderem nachlesen:
            "Die ORDER BY-Klausel gibt die Sortierreihenfolge an:
             SELECT select_liste
                FROM tabellen_ausdruck
                ORDER BY spalte1 [ASC | DESC] [, spalte2 [ASC | DESC] ...]"
            Das Entscheidende ist nicht, ob in irgendeiner Spalte die IDs stehen, das Entscheidende ist die Reihenfolge, beispielsweise "asc" oder "desc". Es reicht an der angegebenen Stelle auch, wenn
              'texte order by datum, id asc'
            steht. Oder auch, wenn dich die IDs so stören,
              'texte order by datum asc'
            Wichtig ist, daß in dieser Zeile überhaupt über die Sortierung entschieden wird. Und es ging ja um die Sortierung. Aus der ergibt sich beispielsweise, ob Cheatahs Satz "Willkommen in der wunderbaren Welt von Microsoft." aus dem Archiv an zweiter oder an vorletzter Stelle auftaucht.

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. hi,

              Im Handbuch kannst du unter anderem nachlesen: [...]

              Was hat das damit zu tun, dass es nicht Aufgabe einer Datensatz-ID ist, zu Sortierungszwecken herangezogen zu werden?

              Bei deinem Vorschlag:

              In getZitate erfolgt die Sortierung der DB-Einträge mit
                'texte order by datum, id desc';.
              Wenn man das nach
                'texte order by id, datum desc';
              ändert, beginnt die Zählung an der "richtigen" Stelle.

              Hast du die Sortierung für datum, die vorher implizit ASC war, auf DESc geändert (und es an die zweite Stelle im Gesamt-Sortierkriterium verschoben).
              Aber mich interessierte eher, was die ID denn dort überhaupt noch im Sortierkriterium verloren hatte ...?

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Hallo Freunde des gehobenen Forumsgenusses,

                Was hat das damit zu tun, dass es nicht Aufgabe einer Datensatz-ID ist, zu Sortierungszwecken herangezogen zu werden?

                Das Datum wird genau einmal gesetzt, nämlich beim Einfügen des Textes und dann nie wieder. Daher ist die Sortierung nach ID identisch zur Sortierung nach Datum.

                Hast du die Sortierung für datum, die vorher implizit ASC war, auf DESc geändert (und es an die zweite Stelle im Gesamt-Sortierkriterium verschoben).

                Im Moment wird weiterhin do sortiert:
                order by datum, id desc

                Und zwar ganz bewusst absteigend, damit auf der ersten Seite der Zitatesammlung die neusten 50 Zitate stehen und nicht die ältesten 50.

                Aber mich interessierte eher, was die ID denn dort überhaupt noch im Sortierkriterium verloren hatte ...?

                Datum ist vom Typ date, weil ich die zusätzliche Genauigkeit von datetime nicht für erforderlich halte, es ist ja nur das Datum des Eintrage-Vorgangs. Da es sehr wahrscheinlich mehrere Zitate an einem Tag geben wird habe ich als zweites Kriterium die ID hinzugenommen, um auf jeden Fall eine eindeutige Sortierung zu erhalten.

                Gruß
                Alexander Brock

                1. hallo Alexander,

                  Und zwar ganz bewusst absteigend, damit auf der ersten Seite der Zitatesammlung die neusten 50 Zitate stehen und nicht die ältesten 50.

                  Was dazu führt, daß die letzte Seite im Extremfall nur einen Eintrag aufweist - oder eben 23. Die erste bekommt dann immer die 50 jüngsten anstelle von "Seitenzahlx50 - GesamtzahlEinträge".

                  Im übrigen will mir der Hinweis, daß IDs nicht zur Sortierung, sondern lediglich zur Identifizierung benutzt werden sollten, zwar einleuchten, allein: ich finde in der mir zugänglichen Doku (die ich jetzt natürlich nochmal gründlich durchstöbert habe) keinen solchen Imperativ. Und wenn wir davon ausgehen, daß alles, was nicht explizit untersagt ist, zulässig sein muß, so ist die Verwendung von IDs durchaus auch für die Sortierung möglich.

                  Im Moment wird weiterhin so sortiert:
                  order by datum, id desc

                  Jaein. Ich lade natürlich nicht _alle_ Zwischenstände, an denen ich herumbastle, ins SVN. Probiert habe ich selbstverständlich auch noch allerlei andere Einstellungen. Ins SVN kommt das erst, wenn ich einen Vorschlag für einigermaßen stabil und diskutabel halte. Was meinst du denn, wieviel tatsächlich unsinniges Zeugs ich durchgespielt und schamhaft verschwiegen habe *g*

                  Aber das ist ja das Interessante bei Projektentwicklung: man fällt 300mal auf die Nase, bis es dann endlich klappt - oder bis die Nase derart viel Hornhaut angesetzt hat, daß mans nicht mehr merkt (Zitat Hopsel [leider fehlt die konkrete Quellenangabe]: "Das habe ich aber schön gesagt. Jetzt muss ich nur noch begreifen, was ich damit meine.")

                  Grüße aus Berlin

                  Christoph S.

                  PS: eigentlich hatte ich das Stichwort "Zitatesammlung" vermeiden wollen, weil damit Teile der Diskussion, die wir an anderer Stelle zu führen haben, hierher geraten. Aber da das nun passiert ist, finde ich es auch nicht so fürchterlich schlimm. So kriegt das Forum immerhin mit, daß an der Zitatesammlung tatsächlich gearbeitet wird.

                  --
                  Visitenkarte
                  ss:| zu:) ls:& fo:) va:) sh:| rl:|
                  1. Hallo Freunde des gehobenen Forumsgenusses,

                    Und zwar ganz bewusst absteigend, damit auf der ersten Seite der Zitatesammlung die neusten 50 Zitate stehen und nicht die ältesten 50.

                    Was dazu führt, daß die letzte Seite im Extremfall nur einen Eintrag aufweist - oder eben 23.

                    Das finde ich überhaupt nicht schlimm, das wird ja auch in Boards, Gästebüchern etc. so gehandhabt. Wenn du das partout blöd findest kann ich auch Methoden zum zählen der Einträge schreiben, so dass du eine variable Anzahl Einträge pro Seite hast, aber dafür überall etwa gleich viele.

                    Jaein. Ich lade natürlich nicht _alle_ Zwischenstände, an denen ich herumbastle, ins SVN.

                    Ich eigentlich schon *g*

                    Gruß
                    Alexander Brock

                    1. hallo Alexander,

                      Ich lade natürlich nicht _alle_ Zwischenstände, an denen ich herumbastle, ins SVN.
                      Ich eigentlich schon *g*

                      <style type="mein Sohn">
                      Das verliert sich mit zunehmendem Alter
                      </style>

                      Ich bin zum Beispiel grade dabei, ein solches Monstrum zu bauen:

                        if ($_SERVER['QUERY_STRING'] ='' || $_SERVER['QUERY_STRING'] = '1.Seite') {  
                         $temp = Datenbank::getInstance()->getZitate(0, 50);  
                        }elseif($_SERVER['QUERY_STRING'] == '2.Seite') {  
                         $temp = Datenbank::getInstance()->getZitate(50, 50);  
                        }elseif($_SERVER['QUERY_STRING'] == '3.Seite') {  
                         $temp = Datenbank::getInstance()->getZitate(100, 50);  
                        }elseif($_SERVER['QUERY_STRING'] == '4.Seite') {  
                         $temp = Datenbank::getInstance()->getZitate(150, 50);  
                        }elseif($_SERVER['QUERY_STRING'] == '5.Seite') {  
                         $temp = Datenbank::getInstance()->getZitate(200, 50);  
                        }elseif($_SERVER['QUERY_STRING'] == '6.Seite') {  
                         $temp = Datenbank::getInstance()->getZitate(250, 50);  
                        }else{  
                         $temp = Datenbank::getInstance()->getZitate(0, 50);  
                      
                      

                      Das ist allerdings unflexibel und starr und eben überhaupt nicht diskutabel, daher findest du das auch nicht im SVN - aber es funktioniert erstmal auf meiner Platte. Also kann ich jetzt nach Wegen suchen, wie ich das eleganter mache, ohne die Funktionalität zu verlieren. Und wenn ich dann so einen diskutablen Ansatz gefunden habe - ja, _dann_ marschiert der ins SVN.

                      Hach, ich habe solche Monstren als Zwischenstadien wirklich lieben gelernt ;-)

                      Grüße aus Berlin

                      Christoph S.

                      --
                      Visitenkarte
                      ss:| zu:) ls:& fo:) va:) sh:| rl:|
                      1. Moin!

                        Ich bin zum Beispiel grade dabei, ein solches Monstrum zu bauen:

                        Oh mein Gott! Das ist ja schlimmer, als man es sich in den tiefsten Alpträumen vorstellen könnte.

                        Kritikpunkt 1:
                        Du benutzt zur Seitenauswahl den gesamten Query-String. Damit verhinderst du komplett, dass parallel noch andere Parameter benutzt werden können, die vielleicht mit der Zitatesammlung nicht mal was zu tun haben müssen.

                        Was ist denn so schlimm an folgender Konstruktion: "?seite=1"
                        Warum muß es sowas sein: "?1.Seite"

                        Kritikpunkt 2: switch/case existiert. Klappt natürlich bei dieser einfältigen Query-String-Konstruktion nicht so simpel, mit vernünftigen Parametern wäre allerdings sowas sehr einfach möglich:

                          
                        switch ($_GET['seite']){  
                         case '1': $temp = Datenbank::getInstance()->getZitate(0, 50); break;  
                         case '2': $temp = Datenbank::getInstance()->getZitate(50, 50); break;  
                        ...  
                         default: $temp = Datenbank::getInstance()->getZitate(0, 50); break;  
                        }  
                        
                        

                        Kritikpunkt 3: Die Zahl der Zitate pro Seite ist fest eingebaut, und nicht dynamisch anpassbar (weder benutzergesteuert, noch zentral konfigurierbar). Was dann natürlich verhindern würde, dass das switch/case überhaupt zum Einsatz kommen kann.

                        Mathematische Kenntnissen würden ergeben: Seite 1 beginnt immer bei 0*$zitatezahl, Seite 2 beginnt bei 1*$zitatezahl, Seite 3 beginnt bei 2*$zitatezahl ... finde die Regelmäßigkeit in dieser Rechenvorschrift!

                        Hach, ich habe solche Monstren als Zwischenstadien wirklich lieben gelernt ;-)

                        Warum ein Monster züchten, wenn es auch ohne geht?

                        - Sven Rautenberg

                        --
                        My sssignature, my preciousssss!
                        1. hallo Sven,

                          Oh mein Gott! Das ist ja schlimmer, als man es sich in den tiefsten Alpträumen vorstellen könnte.

                          Natürlich. Deshalb ist es ja auch absolut inoffiziell, gehört in die Tonne getreten, und, wie ich bereits angegeben habe, ist es auch indiskutabel. Reichte dir denn die Bezeichnung als "Monstrum" nicht?

                          Du benutzt zur Seitenauswahl den gesamten Query-String. Damit verhinderst du komplett, dass parallel noch andere Parameter benutzt werden können, die vielleicht mit der Zitatesammlung nicht mal was zu tun haben müssen.

                          Richtig. Daher lautet die erste Schlußfolgerung: muß tatsächlich der Query-String benutzt werden?
                          Und die Antwort ist vermutlich: Nö, muß es nicht.

                          Was ist denn so schlimm an folgender Konstruktion: "?seite=1"
                          Warum muß es sowas sein: "?1.Seite"

                          Muß es doch nicht. Warum nimmst du etwas so fürchterlich ernst, was sich selbst als "indiskutabel" und als "Monstrum" darstellt?

                          Grüße aus Berlin

                          Christoph S.

                          --
                          Visitenkarte
                          ss:| zu:) ls:& fo:) va:) sh:| rl:|
                          1. Hallo Freunde des gehobenen Forumsgenusses,

                            Richtig. Daher lautet die erste Schlußfolgerung: muß tatsächlich der Query-String benutzt werden?
                            Und die Antwort ist vermutlich: Nö, muß es nicht.

                            Dan schlage ich folgendes vor: mittels mod_rewrite verbiegen wir ^base-url(.*)$ auf zitate.php?param=$1 und werten dann $_REQUEST['param'] aus um zu erkennen, was der Benutzer will.

                            Dann können wir wunderbar schöne URLs machen :-)

                            Gruß
                            Alexander Brock

                            1. hallo Alexander,

                              Dan schlage ich folgendes vor: mittels mod_rewrite verbiegen wir ^base-url(.*)$ auf zitate.php?param=$1 und werten dann $_REQUEST['param'] aus um zu erkennen, was der Benutzer will.
                              Dann können wir wunderbar schöne URLs machen :-)

                              Das hatten wir ja schon vorher, wenn auch nicht öffentlich. Ja, die Idee hat was (ich hatte meine Zweifel, ob der Query-String sinnvoll ist, ja schon früher intern geäußert, obwohl ich selber diese Methode zuerst eingesetzt habe), wir werden es probieren. Und ich bitte dich, die Verwendung von "desc" in getZitate() nochmals zu überdenken. Wir werden darüber reden.

                              Im übrigen hatte ich vorhin wirklich nur illustrieren wollen, was _auf gar keinen Fall_ ins SVN gehört und weshalb ich eben _nicht alle_ Zwichenschritte ins SVN stellen würde/werde. Mein "Monstrum" war, obwohl es tatsächlich rund zwei Stunden auf meiner Platte existiert hat, eben nichts andres als ein Monstrum. Indiskutabel, Blödsinn, Wegwerfware - und Sven ist offenbar darauf eingestiegen, ohne diese Vorgaben zu bemerken. Er hat da meines Erachtens was überlesen. Trotzdem bin ich der Überzeugung, daß fast jeder solchen Krempel erstmal als "Krücke" benutzt, um wenigstens ein Ergebnis zu sehen - wohl wissend, daß der Weg zu diesem Ergebnis auch völlig anders begangen werden kann. Svens Anmerkungen bestehen _in der Sache_ alle _absolut_ zu recht - aber sie bestehen nur dann, wenn es um einen _ernstgemeinten_ Vorschlag/Ansatz gehen sollte. Das war mit dem Topic "Menschelei" und (wie ich hoffe) mit meiner Erklärung dazu aber nicht mehr gegeben.

                              Aber vielleicht hat Sven übersehen, daß ich mit voller Absicht das Topic von "PHP" nach "Menschelei" gewechselt hatte ...

                              Jetzt muß ich es zurückwechseln, weil du sachlich, aber nicht "menscheleimäßig" geantwortet hast ;-)

                              Naja, jetzt haben wir einen Thread, der sich zum Teil aus Sachinformationen, zum anderen Teil aber aus Flames zusammensetzt. Derart exemplarische Threads gibts im Forum selten. Aber gerade solche Threads machen den Charme des Forums aus, finde ich.

                              Grüße aus Berlin

                              Christoph S.

                              --
                              Visitenkarte
                              ss:| zu:) ls:& fo:) va:) sh:| rl:|
                        2. Hallo,

                          if ($_SERVER['QUERY_STRING'] ='' || $_SERVER['QUERY_STRING'] = '1.Seite') {

                          $temp = Datenbank::getInstance()->getZitate(0, 50);
                            }elseif($_SERVER['QUERY_STRING'] == '2.Seite') {
                             $temp = Datenbank::getInstance()->getZitate(50, 50);
                            }elseif($_SERVER['QUERY_STRING'] == '3.Seite') {
                             $temp = Datenbank::getInstance()->getZitate(100, 50);
                            }elseif($_SERVER['QUERY_STRING'] == '4.Seite') {
                             $temp = Datenbank::getInstance()->getZitate(150, 50);
                            }elseif($_SERVER['QUERY_STRING'] == '5.Seite') {
                             $temp = Datenbank::getInstance()->getZitate(200, 50);
                            }elseif($_SERVER['QUERY_STRING'] == '6.Seite') {
                             $temp = Datenbank::getInstance()->getZitate(250, 50);
                            }else{
                             $temp = Datenbank::getInstance()->getZitate(0, 50);

                            
                          
                          > Oh mein Gott  
                            
                          ^^  
                            
                          
                          > ~~~php
                          
                          switch ($_GET['seite']){  
                          
                          >  case '1': $temp = Datenbank::getInstance()->getZitate(0, 50); break;  
                          >  case '2': $temp = Datenbank::getInstance()->getZitate(50, 50); break;  
                          > ...  
                          >  default: $temp = Datenbank::getInstance()->getZitate(0, 50); break;  
                          > }
                          
                          

                          das ließe sich natülich noch weiter vereinfachen, um das Code-Monster loszuwerden:

                          $range=intval(ceil(Datenbank->{$hole_gesamtanzahl}/50));  
                          if($_GET['seite']>$range)  
                               $_GET['seite']=0;  
                          else $_GET['seite']--;  
                            
                          $temp=Datenbank->getInstance()->getZitate(($_GET['seite']*50), 50);
                          

                          - und dauerhaft Ende Gelände!

                          Gruß aus Berlin!
                          eddi

                          1. hallo eddi,

                            das ließe sich natülich noch weiter vereinfachen, um das Code-Monster loszuwerden:

                            $range=intval(ceil(Datenbank->{$hole_gesamtanzahl}/50));

                            if($_GET['seite']>$range)
                                 $_GET['seite']=0;
                            else $_GET['seite']--;
                            $temp=Datenbank->getInstance()->getZitate(($_GET['seite']*50), 50);

                              
                            Interessanter Ansatz. Mal schauen, ob ich ihn irgendwie produktiv umsetzen kann.  
                              
                            
                            >  - und dauerhaft Ende Gelände!  
                              
                            Ja, klar ... nur wollte ich mit meinem "Monster" ein Beispiel anführen, das zwar funktioniert, trotzdem aber Unsinn ist und deshalb auch bei einem gemeinsamen Projekt \_niemals\_ ins SVN gehört - obwohl ich der Überzeugung bin, daß so ziemlich jeder solche "Monster" auf seiner Platte liegen hat. Sie sind nützlich, um erstmal "auf die Schnelle" wenigstens ein Ergebnis zu sehen, sie sind aber Unsinn, sofern man sie tatsächlich als einzig mögliche Lösung ansieht.  
                              
                            
                            > `$range=intval(ceil(Datenbank->{$hole_gesamtanzahl}/50));`{:.language-php}  
                              
                            Seit wenigen Minuten sieht das im speziellen Fall der künftigen Zitatesammlung ungefähr so aus:  
                              `$temp=Datenbank->getInstance()->anzahlZitate(100,50);`{:.language-php}  
                              
                            Und keine Sorge: wir machen das ja als Open Source, und das heißt, sobald alles fertig ist (ich habe allerdings keine Ahnung, wie lange wir dafür noch brauchen werden) wirst du dir den ganzen dann als "fertig" verabschiedeten Code vollständig anschauen können. Es ist gar nicht so verkehrt, wenn zwischenzeitlich auch mal Vorschläge aus dem Forum aufgegriffen und berücksichtigt werden können, da es sich schließlich um eine Entwicklungsarbeit handelt, die letzten Endes dem Forum selbst wieder zur Verfügung gestellt werden soll.  
                              
                              
                            Grüße aus Berlin  
                              
                            Christoph S.
                            
                            -- 
                            [Visitenkarte](http://community.de.selfhtml.org/visitenkarten/view.php?key=26)  
                              
                            ss:| zu:) ls:& fo:) va:) sh:| rl:|  
                            
                            
                            1. Hallo.

                              Es ist gar nicht so verkehrt, wenn zwischenzeitlich auch mal Vorschläge aus dem Forum aufgegriffen und berücksichtigt werden können, da es sich schließlich um eine Entwicklungsarbeit handelt, die letzten Endes dem Forum selbst wieder zur Verfügung gestellt werden soll.

                              Dann möchte ich anregen, die Anzahl pro Seite durch den Nutzer festlegen zu lassen.
                              MfG, at

                        3. hallo Sven,

                          mittlerweile hat sich das im OP angesprochene Problem einigermaßen bewältigen lassen - nicht grundsätzlich, sber zumindest, was den Entwurf für die Zitatesammlung angeht. So weit ich weiß, hast du ja Zugriff auf das Repository. Und kannst dir anschauen, was da an Entwürfen vorliegt.

                          Du benutzt zur Seitenauswahl den gesamten Query-String.

                          Inzwischen nicht mehr. $_QUERY_STRING habe ich zwar tatsächlich anfangs benutzt, aber nur als "Krücke", von der ich wußte, daß sie im Verlauf der Entwicklungsarbeit irgendwann durch etwas möglicherweise "Besseres" ersetzt werden sollte (ist im Thread auch irgendwo nachlesbar). Zur Auswahl standen ein über .htaccess vermittelter Mechanismus oder die Nutzung einer anderen vordefinierten Variablen. Zur Zeit ist $_REQUEST das, was mir am effektivsten erschienen ist, es dürfte aber auch noch andere Wege geben.

                          Was ist denn so schlimm an folgender Konstruktion: "?seite=1"
                          Warum muß es sowas sein: "?1.Seite"

                          Das muß nicht so sein, allerdings ist an "?1.Seite" auch nichts auszusetzen, solange man sicher ist, daß es im Gesamtprojekt nirgends die Anforderung an einen anderen $_QUERY_STRING (mit anderen oder multiplen Übergabeparametern) geben kann. Sobald man mehr als nur einen Übergabeparameter braucht, ist eine Belegung von $_QUERY_STRING in dieser Form allerdings nicht mehr als ein ärgerliches selbstauferlegtes Hemmnis.

                          switch/case  [...] wäre [..] möglich:

                            
                          
                          > switch ($_GET['seite']){  
                          >  case '1': $temp = Datenbank::getInstance()->getZitate(0, 50); break;  
                          >  case '2': $temp = Datenbank::getInstance()->getZitate(50, 50); break;  
                          
                          

                          $_GET soll nach Möglichkeit nicht genutzt werden. Allerdings ist switch/case eine Konstruktion, die umständlichere if/elseif/else-Konstrukte umgehen zu helfen vermag.

                          Mathematische Kenntnissen würden ergeben:

                          Hihi, ich habe grade mal wieder ein altes Zeugnis dafür hervorgekramt, daß ich 1967 bei einer Mathematikolympiade (im damaligen DDR-Bezirk Erfurt) einen ersten Platz belegt habe - noch dazu als Schüler einer Klasse, die stark auf das Erlernen der alten Sprachen ausgerichtet war und deren wöchentliches Mathe-Pensum gerade mal 2 (in Worten: zwei) Unterrichtsstunden betrug. 1967 kannte (und beherrschte) ich offenbar Methoden der Integral- und Differentialrechnung, obwohl diese Dinge uns bis zum Abitur gar nicht beigebracht werden sollten - wir sollten möglichst gut Latein und Griechisch können und natürlich einen exzellenten deutschen Sprachschatz fehlerfrei in Wort und Schrift beherrschen, alles andere war minderrangig. Naja, lange ists her ...

                          Warum ein Monster züchten, wenn es auch ohne geht?

                          Weil Monster sich vorzüglich als Streicheltiere eignen. Man kann sie hätscheln, man fühlt sich von ihnen geliebt und verstanden, und man hat keine Gewissensbisse, wenn man sie irgendwann, sobald sie ihre Dienste geleistet haben, wegwirft.

                          Grüße aus Berlin

                          Christoph S.

                          --
                          Visitenkarte
                          ss:| zu:) ls:& fo:) va:) sh:| rl:|
                  2. Hallo.

                    Im übrigen will mir der Hinweis, daß IDs nicht zur Sortierung, sondern lediglich zur Identifizierung benutzt werden sollten, zwar einleuchten, allein: ich finde in der mir zugänglichen Doku (die ich jetzt natürlich nochmal gründlich durchstöbert habe) keinen solchen Imperativ. Und wenn wir davon ausgehen, daß alles, was nicht explizit untersagt ist, zulässig sein muß, so ist die Verwendung von IDs durchaus auch für die Sortierung möglich.

                    Vieeleicht liegt das daran, dass es wenig zweckmäßig ist, etwas zu verbieten, was a) keine technischen Schwierigkeiten verursacht und b) in konkreten Fällen sinnvoll sein mag.
                    MfG, at

                  3. hi,

                    Im übrigen will mir der Hinweis, daß IDs nicht zur Sortierung, sondern lediglich zur Identifizierung benutzt werden sollten, zwar einleuchten, allein: ich finde in der mir zugänglichen Doku (die ich jetzt natürlich nochmal gründlich durchstöbert habe) keinen solchen Imperativ. Und wenn wir davon ausgehen, daß alles, was nicht explizit untersagt ist, zulässig sein muß, so ist die Verwendung von IDs durchaus auch für die Sortierung möglich.

                    Das ist ja auch keine Bedingung technischer Natur, sondern eine, die sich aus dem Typ eines Datums "Id" ergibt.

                    Du wirst im Manual auch kein "Verbot" finden, dass Datum eines Eintrages in acht 1-Character-Spalten namens

                    jahr_stelle_vier
                    jahr_stelle_drei
                    jahr_stelle_zwei
                    jahr_stelle_eins
                    monat_stelle_zwei
                    monat_stelle_eins
                    tag_stelle_zwei
                    tag_stelle_eins

                    abzulegen.

                    Aber trotzdem dürfte es reichlich unsinnig erscheinen, oder?

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                2. hi,

                  Datum ist vom Typ date, weil ich die zusätzliche Genauigkeit von datetime nicht für erforderlich halte, es ist ja nur das Datum des Eintrage-Vorgangs. Da es sehr wahrscheinlich mehrere Zitate an einem Tag geben wird habe ich als zweites Kriterium die ID hinzugenommen, um auf jeden Fall eine eindeutige Sortierung zu erhalten.

                  Wenn du nur Date nimmst, würde ich behaupten wollen, dass dir die Sortierung der einzelnen Einträge eines Tages bewusst egal gewesen ist - andernfalls hättest du ja Datetime (o.ä.) genommen.

                  Die ID für eine zeitliche Sortierung heranzuziehen, die sich aus den restlichen Daten nicht ergibt, bleibt m.E. ein "Missbrauch" dieser.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. Hallo Freunde des gehobenen Forumsgenusses,

                    Wenn du nur Date nimmst, würde ich behaupten wollen, dass dir die Sortierung der einzelnen Einträge eines Tages bewusst egal gewesen ist - andernfalls hättest du ja Datetime (o.ä.) genommen.

                    Datetime bietet noch lange nicht die nötige Auflösung, um Zitate eindeutig zu sortieren, weil immer noch mehrere Zitate pro Sekunde eingetragen werden können (was beim Einfügen der alten Vorschläge auch passieren wird).

                    Und ja, die Sortierung der Zitate eines Tages ist mir egal, das ändert aber nichts daran dass ich nicht will, dass sich die Sortierung nach jeder Änderung ändert.

                    Die ID für eine zeitliche Sortierung heranzuziehen, die sich aus den restlichen Daten nicht ergibt, bleibt m.E. ein "Missbrauch" dieser.

                    So ein Pech aber auch, die arme ID wird total ausgenutzt und missbraucht :-(

                    Gruß
                    Alexander Brock

                    1. Moin!

                      Wenn du nur Date nimmst, würde ich behaupten wollen, dass dir die Sortierung der einzelnen Einträge eines Tages bewusst egal gewesen ist - andernfalls hättest du ja Datetime (o.ä.) genommen.

                      Es gibt einen Unterschied zwischen "Reihenfolge kann beliebig sein" und "Reihenfolge soll konsistend immer gleich bleiben - aber was zuerst kommt, das ist egal".

                      So ein Pech aber auch, die arme ID wird total ausgenutzt und missbraucht :-(

                      Richtig! :)

                      - Sven Rautenberg

                      --
                      My sssignature, my preciousssss!
                      1. hallo Sven,

                        Es gibt einen Unterschied zwischen "Reihenfolge kann beliebig sein" und "Reihenfolge soll konsistend immer gleich bleiben - aber was zuerst kommt, das ist egal".

                        Nunja, sie sollte schon konsistent sein, und daß es mir dabei nicht egal ist, was zuerst kommt, dürfte inzwischen klar sein.

                        Grüße aus Berlin

                        Christoph S.

                        --
                        Visitenkarte
                        ss:| zu:) ls:& fo:) va:) sh:| rl:|
                        1. hi,

                          und daß es mir dabei nicht egal ist, was zuerst kommt, dürfte inzwischen klar sein.

                          Wir haben inzwischen intern auch diese Sache bekakelt. Es wird sich eine Lösung finden, die letzten Endes die Besucher der (künftigen) Zitatesammlung mit einer befriedigenden Darstellung bekanntmacht und auch "programmiertechnisch" sauber ist.

                          Grüße aus Berlin

                          Christoph S.

                          --
                          Visitenkarte
                          ss:| zu:) ls:& fo:) va:) sh:| rl:|
                        2. Hallo.

                          Nunja, sie sollte schon konsistent sein, und daß es mir dabei nicht egal ist, was zuerst kommt, dürfte inzwischen klar sein.

                          Wenn man die Zitate in Forenbeiträgen verwenden will, und dazu mit den ID areiten muss, wäre es zumindest sinnvol, den Nutzer nicht unnötig zu verwirren.
                          MfG, at