Gå til innhold

[Løst]PHP + MySQL - Trenger hjelp med LIMIT og hvise antall rader.


Anbefalte innlegg

Hei!

 

Har kodet verdens enkleste gjestebok script :p

Jeg har satt den til å printe ut maks 8 poster. Men jeg vil ha slik nederst: "Side: 1, 2, 3" osv.. Hvordan kan jeg få til dette?

Scriptet:

$result = mysql_query("SELECT navn, email, kommentar FROM
gjestebok ORDER BY id LIMIT 8",$con);

while ($myrow = mysql_fetch_array($result))
{
echo "<b>navn:</b> $myrow[0]<br> <b>email: </b>$myrow[1]<br>
<b>post:</b> $myrow[2]<br><br>";
}

Lenke til kommentar
Videoannonse
Annonse

Tenker meg at du kan lage en liste over ID-er som blir hentet ut fra databasen (si, du velger å ta ut de første åtte ID-ene) så holder du styr på hvilke kommentarer du henter ut via en variabel, og når den har hentet ut åtte, så kan du føre over variabelens verdi på hvor langt du har kommet i uthentingen til neste side ved hjelp av POST, GET eller sessions.

 

Litt vanskelig å forklare, men det funker vel muligens...

Lenke til kommentar

Takk for svar, men siden jeg ikke har veldig stor peiling på PHP / MySQL så driver jeg basic. Noen som kan hjelpe meg å få opp et enkelt GET script? Slik at URL'en blir slik: gjestebok.php?innlegg=0-8 (Her viser den innlegg fra 0-8 :p)

eller noe i den duren?

Lenke til kommentar

Jeg skal ikke vise ett og ett innlegg The Prophet ;)

Jeg tenkte mere på slik at jeg har maks 8 innlegg på side slik det er i MySQL-spørringen. Og så hvis det er flere enn 8 innlegg i hele tabellen blir de bare flyttet til neste side slik at det blir: "Side: 1, 2, 3" osv..

Lenke til kommentar
Du må bruke ID-er til gjestebokinnlegga i mysql databasen, og du kan gjøre det veldig enkelt slik:

Man bruker naturligvis LIMIT til dette, ikke IDer. Dette er fordi IDer ikke nødvendigvis er etterfølgende tall. For alt man vet, så kan 0-8 returnere null rader, fordi første starter ved f.eks. 9.

Lenke til kommentar
Du må bruke ID-er til gjestebokinnlegga i mysql databasen, og du kan gjøre det veldig enkelt slik:

Man bruker naturligvis LIMIT til dette, ikke IDer. Dette er fordi IDer ikke nødvendigvis er etterfølgende tall. For alt man vet, så kan 0-8 returnere null rader, fordi første starter ved f.eks. 9.

 

Hei! Jeg har LIMIT på 8. Så den kan ikke vise mere en 8 innlegg, men jeg vil også få til slik at det blir neste side osv :p

Nå går det bare 8 på den ene siden jeg har :p

Lenke til kommentar
Hei! Jeg har LIMIT på 8. Så den kan ikke vise mere en 8 innlegg, men jeg vil også få til slik at det blir neste side osv :p

Nå går det bare 8 på den ene siden jeg har :p

 

"limit $offset, $antall" er mer mysql løsning

"limit $antall offset $offset" er den mer portable løsningen.

$offset = $side * $antall; //der $side starter på 0 for første side

Lenke til kommentar

Ok her har dere koden min :)

Denne koden viser alle innleggene:

<?php
include($_SERVER['DOCUMENT_ROOT'] . '/includes/admin23/dbconnect23.php');
mysql_select_db($dbname, $con);

echo " <a href='index.php?page=add-comment'>Klikk her for å legge igjen en melding!</a><br><br>";
echo " <b>Kommentarer</b><hr>";


$id = $_GET['innlegg'];

$result = mysql_query("SELECT * FROM
guestbook ORDER BY id LIMIT 8",$con);

while ($myrow = mysql_fetch_array($result))
{
echo "<b>ID:</b> <a href='index.php?page=guestbook2&innlegg=$myrow[0]'>$myrow[0]</a> <br> <br />
<b> " ?><? echo $lang['gjestebok_navn2']; ?> <? echo "</b> $myrow[1] <br>
<b> " ?><? echo $lang['gjestebok_email2']; ?> <? echo "</b>$myrow[2] <br>
<b> " ?><? echo $lang['gjestebok_kommentar2']; ?> <? echo "</b> $myrow[3]<br />
--------<br />
";
}


?>

 

EDIT:

 

Glemte ] ved slutten

 

EDIT 2:

Så det jeg ønsker å gjøre er å lage et system som setter maks 8 innlegg per side, men det har jeg gjort her:

$result = mysql_query("SELECT * FROM
guestbook ORDER BY id LIMIT 8",$con);

Så når det er maks 8 visninger per side ønsker jeg å vise 8 nye på neste side. Skjønner? :wee:

Endret av Gjest
Lenke til kommentar
Så det jeg ønsker å gjøre er å lage et system som setter maks 8 innlegg per side, men det har jeg gjort her:

$result = mysql_query("SELECT * FROM
guestbook ORDER BY id LIMIT 8",$con);

Så når det er maks 8 visninger per side ønsker jeg å vise 8 nye på neste side. Skjønner? :wee:

Du kan kanskje lese denne posten.

Endret av OIS
Lenke til kommentar

Siden M4artin linket til er en side med mange veldig gode tutorials fra en som heter <etellerannet>Sampson. - Den videon som M4artin linket til, er en video spessifisert til Pagination, noe som er en betegnelse på og få slike "Fram og tilbake knapper". - Hvis du følger videoen, og hører på hva han fyren i videoen sier, så får du det til meget godt! :)

 

EDIT: Dæven hn leif sku vær innom idag (sry dialekten å sms språket :p)

Endret av Famen
Lenke til kommentar
Hei! Jeg har LIMIT på 8. Så den kan ikke vise mere en 8 innlegg, men jeg vil også få til slik at det blir neste side osv :p

Nå går det bare 8 på den ene siden jeg har :p

 

"limit $offset, $antall" er mer mysql løsning

"limit $antall offset $offset" er den mer portable løsningen.

$offset = $side * $antall; //der $side starter på 0 for første side

Hvordan kan du hevde at «limit $antall offset $offset» er mer portabel? Såvidt jeg veit er ikke akkurat de metodene i MySQL for limit særlig portable. Ikke at jeg har noen god oversikt, men PostgreSQL er vel eneste databasen som også gjøre det på den måten. Standarden er forøvrig noe slikt:

SELECT * FROM ( SELECT
   ROW_NUMBER() OVER (ORDER BY key ASC) AS rownum,
   columns
 FROM tablename
) AS foo
WHERE rownum > skip AND rownum <= (n+skip)

eller slik

SELECT... 
FROM ... WHERE ... 
ORDER BY ... 
OFFSET skip ROWS 
FETCH FIRST n ROWS ONLY

og MySQL støtter ingen av delene. Det finnes en 3. metode med cursors, men MySQL støtter såklart heller ikke den metoden. Så portabilitet med MySQL i forhold til limit med offset vil jeg si er svært liten uannsett hva man velger.

 

Når det er sagt så er «limit $antall offset $offset» uannsett å foretrekke i og med at den er betydelig enklere å forstå enn «limit $offset, $antall»

Lenke til kommentar
Hvordan kan du hevde at «limit $antall offset $offset» er mer portabel? Såvidt jeg veit er ikke akkurat de metodene i MySQL for limit særlig portable. Ikke at jeg har noen god oversikt, men PostgreSQL er vel eneste databasen som også gjøre det på den måten.

 

Når det er sagt så er «limit $antall offset $offset» uannsett å foretrekke i og med at den er betydelig enklere å forstå enn «limit $offset, $antall»

 

Det har du rett i. Eg bruker bare MySQL og PostgreSQL så kode som funker i begge er "portabel" for meg. :)

Burde undersøkt dette nærmere.

 

Det ser ut som den mest portable løsningen er cursors (som ikke funker på MySQL) fulgt av subselect med radindex (som ikke støttes av MySQL eller PostgreSQL).

 

En oversikt. Vet ikke kor oppdatert denne siden er.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...