[MSSQL] Seitenanzeige mit Umblättern

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

  • [MSSQL] Seitenanzeige mit Umblättern

    Hallo!

    Ich habe eine Abfrage von mehreren Spalten einer Tabelle in PHP und MYSQL geschrieben.
    Ich möchte jetzt die Ausgabe seitenweise angezeigt haben. Da ich beim Umsetzen meines Vorhabens Probleme habe, hatte ich mich auf die Suche nach einem Tutorial gemacht. Ich bin unteranderem auf dieses hier gestoßen.
    Es ist zwar für PHP und MySQL, aber ich habe die Funktionen für MSSQL geändert und den Code einfach unten bei meinem jetzigen Script angehängt.

    PHP-Code:
    $select mssql_query("select * from testtabelle");
        
    $reihen mssql_num_rows($select);
        
        
    $zeigen floor($reihen 5);
        
        if(!
    $start) { $start 0.1; }
        
        
    $result mssql_query("select * from testtabelle limit $start,5");
        echo 
    "<table>";
            while (
    $zeile mssql_fetch_array($result)) {
            echo 
    "<tr><td>$zeile[3]</td></tr>";
        }
        echo 
    "</table>";
        if(
    $start 0.1) {
                
    $zurueck $start 5
                echo 
    "<a href=\"$PHP_SELF?start=$zurueck\"><< Zurück</a>"
        }
        for(
    $i 0$i <= $zeigen$i++) {
            echo 
    " <a href=\"$PHP_SELF?start=$n\">$i</a> ";
        
    $n += 5;
        }
        
    $weiter $start 5;
        if(
    $reihen $weiter) {
                echo 
    "<a href=\"$PHP_SELF?start=$weiter\">Weiter >></a>"
        } 
    Es tauchen nun allerdings Fehlermeldungen auf:

    Warning: mssql_query() [function.mssql-query]: message: Zeile 1: Falsche Syntax in der Nähe von '0.1'. (severity 15) in *** on line 126

    Warning: mssql_query() [function.mssql-query]: Query failed in *** on line 126

    Warning: mssql_fetch_array(): supplied argument is not a valid MS SQL-result resource in *** on line 128
    Wenn ich das richtig verstehe, gibt es Probleme mit den Funktionen. Könnte Ihr mir bitte helfen wie ich das Script letztlich nun doch zum Laufen bringe?

    Gruß

  • #2
    $start = 0.1;


    das würd ich auch nicht als limit interpretieren können.

    Kommentar


    • #3
      Stimmt. Das ist ein seltsamer Startwert.

      Genügt es wenn ich "0" setze?

      /edit: Ne, das reicht nicht:

      Warning: mssql_query() [function.mssql-query]: message: Zeile 1: Falsche Syntax in der Nähe von '0'. (severity 15) in *** on line 127

      Warning: mssql_query() [function.mssql-query]: Query failed in *** on line 127

      Warning: mssql_fetch_array(): supplied argument is not a valid MS SQL-result resource in *** on line 129
      Kannst Du mir bitte helfen?
      Zuletzt geändert von msycho; 04.08.2006, 17:53.

      Kommentar


      • #4
        MSSQL kennt afaik kein LIMIT ... hier mal schauen: http://www.php-resource.de/forum/sea...der=descending
        Kissolino.com

        Kommentar


        • #5
          richtig:

          http://www.planet-source-code.com/vb...d=850&lngWId=5

          http://forums.aspfree.com/microsoft-...0bt-29770.html

          Kommentar


          • #6
            Ich muss ehrlich sagen, ich blick gerade nicht mehr durch.
            Ich weiß jetzt, dass MSSQL "limit" nicht kennt/versteht. Aber was ist eine Alternative dafür? mssql_data_seek?

            Könnt Ihr mir nicht bitte eine praktische Lösung anbieten, an der ich mich weiter versuchen kann?

            Kommentar


            • #7
              schau dir den ersten link genau an.

              Kommentar


              • #8
                Sorry, aber ich versteh nicht wie den nachfolgenden Code mit dem im ersten Post geposteten Code zusammenbringe.

                PHP-Code:
                select from (
                 
                select top 10 emp_id,lname,fname from (
                    
                select top 30 emp_id,lname,fname
                    from employee
                   order by lname asc
                 
                ) as newtbl order by lname desc
                ) as newtbl2 order by lname asc 

                Kommentar


                • #9
                  komm, die felder und tabellennamen wirst du selbst anpassen können.
                  und die "top n" schreibweise wählt "die ersten n" datensätze.

                  wenn du also top 10 von der top 30 nimmst, selektierst du (mit richtiger sortierung) die 10 einträge zwischen (30-10)=20 und 30.

                  wie also musst du die zahlen 30 und 10 manupulieren, um die zeilen von a bis b zu markieren (erstmal ganz allgemein)?

                  Kommentar


                  • #10
                    Ich möchte immer nur 10 Datensätze auf einer Seite angezeigt haben. Die anderen sollen auf weiteren Seiten mit ebenfalls jeweils 10 Datensätzen angezeigt werden.

                    Wenn ich das jetzt richtig verstehe, muss ich beides mal top 10 schreiben: 10 - 10 = 0 und 10. (?)

                    Was die Felder und Tabellennamen angeht, was ist was ist dem o.g. Codeschnipsel? Ich steh grad ziemlich auf dem Schlauch.

                    Kommentar


                    • #11
                      nein, die zweite zahl ist die oberschranke.

                      und
                      Code:
                      SELECT ... FROM ... ORDER BY ...
                      funktioniert in allen sql-servern identisch.

                      Kommentar


                      • #12
                        Was heisst Oberschranke? Die maximale Anzahl der Datensätze? Wenn ja, woher soll ich die wissen? Das dürften mehrere 10.000 sein.

                        Zu dem Code selber nochmal:

                        PHP-Code:
                        SELECT 
                        FROM 
                        SELECT TOP 10 emp_id,lname,fname 
                        FROM 
                        (  SELECT TOP 30 emp_id,lname,fname 
                        FROM employee 
                        ORDER BY lname asc 

                        AS 
                        newtbl 
                        ORDER BY lname desc 

                        AS 
                        newtbl2 ORDER BY lname asc 
                        emp_id,lname,fname sind die Spaltennamen?
                        employee ist der Tabellenname?
                        Was ist newtbl und newtbl2 und asc?
                        Zuletzt geändert von msycho; 05.08.2006, 13:18.

                        Kommentar


                        • #13
                          Original geschrieben von msycho
                          Was heisst Oberschranke? Die maximale Anzahl der Datensätze? Wenn ja, woher soll ich die wissen? Das dürften mehrere 10.000 sein.
                          wie wäre es mit einer query mit COUNT()?
                          emp_id,lname,fname sind die Spaltennamen?
                          ja
                          employee ist der Tabellenname?
                          ja

                          Was ist newtbl und newtbl2
                          jeweils aliase für das ergebnis (ne art platzhalter)
                          und asc?
                          asc = ascending, desc = descending ... die bedeutung kannst du leicht nachschlagen

                          ps: umbrich bitte den code.
                          Kissolino.com

                          Kommentar


                          • #14
                            Was heisst Oberschranke? Die maximale Anzahl der Datensätze?
                            nein. du scheinst die query immer noch nicht begriffen zu haben.

                            schreibe dir 100 zeilen mit irgendwelchen wörtern aus (etwa alphabetisch sortiert). wähle von diesen wörtern die ersten 30. wähle von diesen 30 die letzten 10. welche zeilen sind nun ausgewählt? richtig - zeilen 20 bis 30.

                            hier noch ein versuch in ascii-art:

                            Code:
                                       ########## <- die gesuchte menge 20 bis 30
                                       |        |
                            ########################################### <- deine datensätze
                            
                            
                            ##################### <- die ersten 30
                                       ########## <- davon die letzten 10

                            Kommentar


                            • #15
                              Ich danke Euch soweit.

                              zeilen 20 bis 30.
                              Ich möchte aber auf Seite Eins 0 bis 5, Seite zwei 5 bis 10 etc.

                              Code:
                              mssql_query("SELECT * FROM (
                               SELECT TOP 5 testspalte,testspalte_2 FROM (
                               SELECT TOP 10 testspalte,testspalte_2 FROM testtabelle ) ) ");
                                  $reihen = mssql_num_rows($select);
                              Ich bicks jetzt grad überhaupt nicht mehr.
                              Für MySQL gibt es dutzende Tutorials wo die seitenweise Anzeige einer Ausgabe erklärt wird. Wieso gibt es das nicht für MSSQL?

                              Kommentar

                              Lädt...
                              X