[PHP] ASC / DESC - Logikproblem

Dieses Thema im Forum "Webentwicklung" wurde erstellt von =Bleistift, 27. Februar 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 27. Februar 2007
    ASC / DESC - Logikproblem

    Tach,
    ich nochmal mit dem selbstgeschriebenem Gästebuch
    Ich hab nun ein Limit eingebaut, damit nur die letzen x Einträge ausgegeben werden.
    Trotzdem möchte ich natürlich den höchsten Wert zuerst angezeigt bekommen.

    ORDER BY nummer ASC/DESC LIMIT 5

    Mit ASC ist das Ergebnis:
    5-4-3-2-1

    Mit DESC ist das Ergebnis:
    4-5-6-7-8

    Ich hätte aber gerne
    8-7-6-5-4

    Also nach ASC geordnet aber die LETZEN 5 Einträge.
    -> unmöglich ?(


    //Edit: Wäre nett wenn ihr antwortet, bin aber erst um 20:30 wieder da
     
  2. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    hey.

    also probier das mal aus.

    PHP:
    $result  mysql_query ( "SELECT Spalte FROM tabelle ORDER BY nummer ASC/DESC limit 5 " );

    $i = 0 ;

    while(
    $data  mysql_fetch_array ( $result ))
     {
      
    $result_array [ $i ] =  $data ;
      
    $i ++;
     }
    $result_array_reverse  array_reverse ( $result_array );

    foreach(
    $result_array_reverse  as  $data )
     {
      echo 
    $data [ 'Spalte' ];
     }
    wusste dass es mit array_reverse geht. war aber zu faul, was selber alles selber zu schreiben aber probier es trozdem mal aus :]
     
  3. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    @hacker5
    Was soll den das array_reverse-Gemurkse? =)

    @Bleistift
    Irgendwas hast du verhauen
    ASC steht für "ascending", also aufsteigend, DESC für "descending", also absteigend. In deinem Post ist also irgendwas falsch.

    Wenn du die Spalten 1, 2 ... 8 hast, kriegst du mit folgendem Query auf jeden Fall die fünf Einträge mit der höchsten Zahl.

    Code:
    SELECT `spalte1`
    FROM `tabelle`
    ORDER BY `spalte2` DESC
    LIMIT 5
    // edit:
    Du musst da nur mit mysql_fetch_*() drübergehen, sonst nichts.
     
  4. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    mysql_query('SELECT * FROM xxx LIMIT '.$start.',5')

    so wie du auf start kommst...

    $count = mysql_query("SELECT id FROM news");
    $count = mysql_num_rows($count);
    $start = $count-5

    Habs jetzt nicht getestet, hoffe es läuft

    Da kannst du jetzt auchnoch sachen wir paging usw. einbringen.
    Ich hoffe auf sowas zielst du ab, denn ansonsten versteh ich den Post nicht, weil ein einfacher Query es auch tut (Mit einfachem Limit)

    Das ist jetzt im Grunde das selbe in Grün.
    Bei normalem limit macht er die letzten 5 und bei meinem Beispiel rechnet er höchste id - 5 und gibt dann die nächsten 5 Datensätze aus
     
  5. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    @dutziman

    egal ob asc oder dscn er wird durch eine einfache mysql abfrage nicht 87654 rausbekommen, sondern

    45678 oder 12345

    das "array_reverse-Gemurkse" , dreht den array um und folglich wird aus 45678 => 87654 =) ^^
     
  6. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Nein. DESC dreht vor dem SELECT die Tabelle um, folglich kommt 87654 heraus. Genau deswegen heißt diese Richtung auch "absteigend".
     
  7. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    ja ich weiß eig. schon dass desc absteigent ist. ^^

    dann hat mich

    Mit ASC ist das Ergebnis:
    5-4-3-2-1

    Mit DESC ist das Ergebnis:
    4-5-6-7-8

    das etwas verwirrt. ?(
     
  8. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Mit Limit 5 rufst du die ersten fünf einträge ab und die sind nunmal scheinbar 5-1, aber bevor ich dir hier was vorkaue ... hier http://tut.php-q.net/login-news.html#u8 selber geschaut

    EDIT: mh aber naja, auch irgendwie dämlich was ich schrieb, wenn ich recht drüber nachdenke sehe ich solch ein verhalten auch zum ersten mal.
     
  9. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Ja, mich auch. Aber das muss so einfach falsch sein.
    Ich arbeite schon seit Jahren mit MySQL und mir ist noch nie was passiert, wo DESC aufsteigend sortiert hat.
     
  10. 27. Februar 2007
    AW: ASC / DESC - Logikproblem


    Right.

    Hab dem hans auch im IRC schon gesagt, dass er es mit
    SELECT doof FROM table ORDER BY id/nummer DESC LIMIT 5
    machen soll.. aber er hat irgendwas in seiner Tabellenstruktur vermurkst. ^^
    Naja, mit so wenig infos, hans, können wir dir nicht gescheit helfen.
     
  11. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Ich habs aus Platzgründen nebeneinander geschrieben. Untereinander sähe es so aus:

    Mit ASC ist das Ergebnis:
    5
    4
    3
    2
    1

    Mit DESC ist das Ergebnis:
    4
    5
    6
    7
    8

    Ich hätte gerne
    8
    7
    6
    5
    4


    Also ist DESC nicht die Lösung meines Problems.
    Ich guck mir mal an was hacker5 sich da zurecht ge-arrayt hat.
     
  12. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Zeig bitte mal die _kompletten_ Datensätze inklusive Struktur.
     
  13. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Das stimmt einfach nicht, wie ich die ganze Zeit am praktischen Beispiel sehe.

    Hier ist die Seite http://hanspe.book.hl-users.com/testgb/

    PHP:
    mysql_query ( "SELECT nummer, name, email, homepage, eintrag, datum FROM gaestebuch ORDER BY nummer DESC LIMIT 5" );
    Wie ihr auf der Seite seht kommt als Ausgabe:
    4
    5
    6
    7
    8
     
  14. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Bitte mal Datenbankstruktur, Datensätze und vollständigen PHP-Code.
    Ich hab schließlich keine Glaskugel :x
     
  15. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    PHP:
    $result  mysql_query ( "SELECT nummer, name, email, homepage, eintrag, datum FROM gaestebuch ORDER BY nummer DESC LIMIT 5" );

        
    //Anzahl der Zeilen der Datensätze
         
    $num  mysql_numrows ( $result );

        if (
    $num  !=  0 )
         {
         for (
    $i = 0 ; $i < $num ; $i ++)
          {
          
          
    $nrak  $num  $i  1 ;

          
    $nummer  mysql_result ( $result , $nrak , "nummer" );
          
    $name  mysql_result ( $result , $nrak , "name" );
          
    $eintrag  mysql_result ( $result , $nrak , "eintrag" );
          
    $email  mysql_result ( $result , $nrak , "email" );
          
    $homepage  mysql_result ( $result , $nrak , "homepage" );
          
    $datum  mysql_result ( $result , $nrak , "datum" );

    echo 
    "<tr><td class=name>&nbsp;<b> $nummer $name </b> *  $datum </td>\n<td class=name align=right>" ;

    usw
     
  16. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Mit ASC/DESC bekommst du die Ausgabe so nicht hin. Du musst LIMIT mit einem Startwert benutzen:

    $items_per_page = 5;
    $start = $insgesamt - $items_per_page;
    ...
    SELECT ... ORDER BY nummer ASC/DESC ( ka welches das richtige ist ) LIMIT $start,$items_per_page
     
  17. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    PHP:
    $query  'SELECT `nummer`, `name`, `eintrag`'
           
    . ' FROM `gaestebuch`'
           
    . ' ORDER BY `nummer` DESC'
           
    . ' LIMIT 5' ;
    if (!(
    $result  = @ mysql_query ( $query )))
    {
        
    trigger_error ( 'query failed: ' . mysql_error (),
                      
    E_ERROR );
    }
    while (
    $row  = @ mysql_fetch_object ( $result ))
    {
        
    sprintf ( '#%d [%s]: %s' . "\n" ,
                
    $row -> nummer ,
                
    $row -> name ,
                
    $row -> eintrag );
    }
    Das muss so gehen, ich mach sowas doch nicht seit heute morgen =)
    Ich fress sonst meinen LCD.


    @kee
    Nein. Gibt man LIMIT nur eine Zahl, nimmt es automatisch an, dass es bei der ersten Zeile in der Ergebnistabelle (also die Zeile 0) anfangen soll.


    // edit:
    Ich versuche mal, das Verhalten von MySQL zu erklären.

    Wir haben 10 Datensätze, die Tabelle hat die Spalten "id" und "name".
    Code:
    1 - Thomas
    2 - Katrin
    3 - Karl
    4 - Marta
    5 - Thorsten
    6 - Lena
    7 - Gerhard
    8 - Anna
    9 - Ulrich
    10 - Heike
    Wenn wir mal von dem Query oben ausgehen, also "ORDER BY `id` DESC LIMIT 5", sortiert MySQL die zehn Datensätze nun nach "id", und zwar absteigend.

    Die Liste wird also praktisch umgedreht und sieht dann so aus.
    Code:
    10 - Heike
    9 - Ulrich
    8 - Anna
    7 - Gerhard
    6 - Lena
    5 - Thorsten
    4 - Marta
    3 - Karl
    2 - Katrin
    1 - Thomas.
    Wie schon gesagt, ist "LIMIT 5" die Kurzform von "LIMIT 0, 5". MySQL also in dieser Liste bei der Zeile Nummer 0, also der ersten, anfangen und fünf Zeilen lesen.

    Dabei kommt dann diese Liste raus.
    Code:
    10 - Heike
    9 - Ulrich
    8 - Anna
    7 - Gerhard
    6 - Lena
    Die kann man dann mit mysql_fetch_*() auslesen.
     
  18. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    und was is mit meinem script ? ^^ funzt das auch nicht =)

    *ironie* @dutziman das kann nicht gehen , und jetzt fress dein LCD will das sehen =) =) *ironie*
     
  19. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Nein, nein und nochmals NEIN !

    6. Lena
    7. Gerhard
    8. Anna
    9. Ulrich
    10. Heike


    Ich hab das ORDER BY `id` DESC LIMIT 5 aus deinem Post verwendet, 10 Einträge mit deinen vorgegebenen Namen gemacht und es kommt eben nicht so raus wie du denkst.

    Das von hacker5 hab ich noch nicht versucht, weil ich es ehrlich gesagt einfahc nicht verstehe.
     
  20. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Ich fress das Ding echt gleich... bei mir läuft das perfekt, genau wie in meinem Post beschrieben.

    MySQL 5.0.33
     
  21. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    -- version 2.8.0.1
    -- phpMyAdmin

    -- Server Version: 4.1.22
    -- PHP-Version: 4.4.4-tuxtools

    Ich versuch nun einfach rechnerisch mit LIMIT $var1, $var2 auf das gewünschte Ergebnis zu kommen.

    //Edit:
    Rechnerisch komm ich jetzt darauf.
    Allerdings nur wenn das Limit kleiner ist, als die Anzahl der Einträge.
    D.h. ich kann das Limit nicht auf 50 setzen, wenn nur 10 Einträge existieren.
    Mist !

    //Edit2:
    Ich komm jetzt erst auf die Idee, mal WHERE nummer > 5 zu probieren
    Mal gucken was da passiert
     
  22. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    Also mit
    PHP:
         $num  mysql_numrows ( $result );
     
    $result  mysql_query ( "SELECT nummer, name, email, homepage, eintrag, datum FROM gaestebuch WHERE 'nummer' < $num " );
    Geht es, es wird alles das kleiner ist als die höchste Eintragszeahl (also alles) ausgegeben.

    Wenn ich jetzt $limit = $num-5; definiere, wie kann ich dann WHERE 'nummer' >$limit<$num richtig definieren ? So scheint die Syntax nicht zu stimmen.

    Nochmal formuliert.
    WHERE 'nummer' über $limit aber unter $num

    Wie lautet dafür der richtige Befehl ?
     
  23. 27. Februar 2007
    AW: ASC / DESC - Logikproblem


    WHERE 'nummer' > $limit and < $num

    wie sieht es damit aus ? mhh wenn es totaler schwachsinn war, einfach ignorieren ^^ is schon spät
     
  24. 27. Februar 2007
    AW: ASC / DESC - Logikproblem

    War anscheinend Schwachsinn, es kommen nur 10 leere Felder raus.
     
  25. 28. Februar 2007
    AW: ASC / DESC - Logikproblem

    WHERE 'nummer' > $limit
    AND 'nummer' < $num
     
  26. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.