Avatar billede havmaage Juniormester
24. august 2004 - 09:47 Der er 15 kommentarer og
1 løsning

php hent data fra mysql og vise de første 10 side 123 etc.

Hej!
jeg har foresøgt at søge i svar her og jeg kan se emnet er besvaret en gang, men jeg kan ikke gennemskue det, så nu opretter jeg dette spg.
jeg henter data fra min mysql server og smider dem ind i en tabel, imidlertid bliver det et problem hvis der er mange records og de vare listes derud af. Derfor kunne jeg godt tænke mig at vise f.eks 10 records, derefter have et link der peger på de næste 10 etc..

min code ser således ud.

while ($row = mysql_fetch_array($result)) {
                       
               
   
            $id=$row["vidensId"];
                  $overskrift=$row["overSkrift"];
                  $dato =$row["dato"];
                  $brugerId = $row[brugerId];
            $navn =$row["navn"];
            $Tlf =$row["Tlf"];
            $text=$row["vidensText"];     
            $kategori =$row["type"];
           
            print "<tr>"; 
           
            print "<td>$id</td>";   
            print "<td>$navn</td>"; 
                  print "<td>$brugerId</td>";       
            print "<td>$Tlf</td>";
            print "<td>$dato</td>";   
              print "<td><a href=\"tips.php?id=$id>\">$overskrift</a></td>";
            //print "<td>$overskrift</td>";   
                  print "<td>$kategori</td>";
            print "</tr>";
       

           
        }

            print "</table>";
       
Er der nogen der kan hjælpe
Avatar billede x4all_dk Nybegynder
24. august 2004 - 10:16 #1
Kan du ikke bruge LIMIT i SQL...

SELECT * FROM table LIMIT 0,10;
SELECT * FROM table LIMIT 11,20;

Så ved tryk på "næste" så kan du få de næste 10.
Avatar billede dennismp Nybegynder
24. august 2004 - 10:18 #2
Har du læst artiklen?

Tricket består i, at du bruger SQL til at vælge de rigtige rækker..

LIMIT 0,10 (eller blot LIMIT 10) tager de første 10
LIMIT 10,10 tager de næste
LIMIT 20,10 .. osv

Se evt på dette spørgsmål - der er også lidt kode.
http://www.eksperten.dk/spm/515013
Avatar billede coderdk Praktikant
24. august 2004 - 12:05 #3
Oh ja, og i stedet for at lave to queries, først en SELECT COUNT(*) for at få antallet, kan du bare få den i den ene SQL-sætning som du bruger, sammen med en ny. Eksempel:

$sql = "SELECT id, navn, efternavn, SQL_CALC_FOUND_ROWS FROM person LIMIT 0,10";
$qh = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $qh ) )
{
  echo "$row[id] $row[navn] $row[efternavn]<br />";
}
mysql_free_result( $qh );
$sql = "SELECT FOUND_ROWS() AS antal";
$qh = mysql_query( $sql );
$row = mysql_fetch_assoc( $qh );
echo "Der var $row[antal] rækker i alt";

Det er ikke så hårdt for databasen ;)
Avatar billede dennismp Nybegynder
24. august 2004 - 12:24 #4
Hov, den kendte jeg ikke. Har du en pointer til mysql-doc'en? Kan ikke umiddelbart finde andet end en bemærkning i en ikke-engelsk udgave - det gik jeg ikke meget ud af :)
Avatar billede coderdk Praktikant
24. august 2004 - 12:36 #5
dennismp, det har jeg da :) Den er rigtig lækker :) Værsgo: http://dev.mysql.com/doc/mysql/en/Information_functions.html
Avatar billede coderdk Praktikant
24. august 2004 - 12:37 #6
Det er muligt at den burde se sådan ud:

$sql = "SELECT SQL_CALC_FOUND_ROWS id, navn, efternavn FROM person LIMIT 0,10";
Avatar billede dennismp Nybegynder
24. august 2004 - 12:47 #7
Ah, jeg fik vist aldrig sat mig ind i hvad mysql-4 kan.

Den er jo perfekt til sådan noget paging. Herligt, jeg lærte noget nyt :)
Avatar billede havmaage Juniormester
24. august 2004 - 13:06 #8
ok nu har jeg forsøgt med eksemplet i spg515013 men den viser kun det antal poster jeg sætter den til, det er lige som der går noget galt når den skal genrere link til næste side, selvom jeg sætter antal til 5 og der er 12 poster burde den jo linke til næste side, men den skriver bare "1 er sjovt" "er sjovt" har jeg puttet på bare for debugging. kan i se om der er noget galt her


$antal=5;
    $query_antal="select count(*) from vidensData";                                       
    $antalposter=mysql_query($query_antal);
      //antal sider
    $antalsider= ceil($antalposter /$antal);
   
    if( isset($_GET['sidetal']) ) {
        $sidetal = $_GET['sidetal'];
        if( $sidetal < 1 )
            $sidetal = 1;
        elseif( $sidetal > $antalsider )
            $sidetal = $antalsider;
        }
    else {
    $sidetal = 1;
    }
$limit_fra = ($sidetal-1)*$antal;



    $result = mysql_query("select vidensData.vidensId, vidensData.vidensText, vidensData.dato,vidensData.overSkrift,
                bruger.navn, bruger.Tlf,kategori.type
                from vidensData,bruger,kategori
                where bruger.brugerId = vidensData.brugerId   
                and kategori.kategoriId=vidensData.kategoriId LIMIT $limit_fra,$antal
");       
        print "<table =border =\"1\" width = \"60%\">";
              print "<td>tips id</td><td>bruger</td><td>bruger id</td><td>Tlf</td><td>Dato</td><td>overskrift</td><td>kategori</td><tr>";
             
        while ($row = mysql_fetch_array($result)) {
                       
               
   
            $id=$row["vidensId"];
                  $overskrift=$row["overSkrift"];
                  $dato =$row["dato"];
                  $brugerId = $row[brugerId];
            $navn =$row["navn"];
            $Tlf =$row["Tlf"];
            $text=$row["vidensText"];     
            $kategori =$row["type"];
           
            print "<tr>"; 
           
            print "<td>$id</td>";   
            print "<td>$navn</td>"; 
                  print "<td>$brugerId</td>";       
            print "<td>$Tlf</td>";
            print "<td>$dato</td>";   
              print "<td><a href=\"tips.php?id=$id>\">$overskrift</a></td>";
            //print "<td>$overskrift</td>";   
                  print "<td>$kategori</td>";
            print "</tr>";
       

           
        }

            print "</table>";
              for($i=1;$i<=$antalsider;$i++) {
            if( $i == $sidetal ) {
                print "<b>$sidetal er sjovt</b> ";
            }
            else {
            print '<a href="forside.php?sidetal='.$i.'">'.$i.'</a> ';
            }
        }
Avatar billede dennismp Nybegynder
24. august 2004 - 13:18 #9
Prøv at skrive $antalposter og $antalsider ud. Hvilke værdier har de?
Avatar billede havmaage Juniormester
24. august 2004 - 13:41 #10
antal sider giver 1, antalposter giver Resource id #4
min sql ser ud som $query_antal="select count(*) from vidensData";                                       
    $antalposter=mysql_query($query_antal);


Det underlige er at når jeg laver "select count(*) from vidensData" i mysql promt giver den 12.
Avatar billede dennismp Nybegynder
24. august 2004 - 13:49 #11
Det er mig der har lavet en fejl i det spørgsmål:

$query_antal=mysql_query("select count(*) from vidensData") or die(mysql_error());
$antalposter=mysql_result($query_antal,0);

se om det ikke hjælper
Avatar billede havmaage Juniormester
24. august 2004 - 13:57 #12
taaaak nu virker det,Er det fair hvis jeg giver Dennismp point ?, læg lige et svar DennisMp
Avatar billede dennismp Nybegynder
24. august 2004 - 14:01 #13
Hvis du har mod på det, så kan du jo prøve at udnytte det coderdk fortalt - at man kan spare lidt på mysql. Han burde jo have points for den linje :)
Avatar billede havmaage Juniormester
24. august 2004 - 14:08 #14
ja det kan der være noget om ;-) så må han lige lægge et svar og så mu du dele med ham. jeg giver ham lige 15 min til at ligge et svar.
Avatar billede coderdk Praktikant
24. august 2004 - 14:23 #15
Nah, det var bonus ;) Men jeg anbefaler at bruge det :)
Avatar billede havmaage Juniormester
24. august 2004 - 14:25 #16
Tak til jer alle! hva skulle man gøre uden eksperten.dk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester