hallo

kan iemand mij een voor beeld geven over hoe ik de gegevens van een data base laat weergeven op mijn pagina echter moet hij me 5rows weergeven en de volgende op een volgende pagina

bedoeling

sql

id - naam - telefoon - bericht

1 - piet - 060000001 - hallo1
2 - jan- 060000002 - hallo2
3 - klaas - 060000003 - hallo3
4 - ger- 060000004 - hallo4
5 - per - 060000005 - hallo5
6 - bob - 060000006 - hallo6
7 - johan - 060000007 - hallo7

php
pagina 1

piet 060000001 - hallo1
jan- 060000002 - hallo2
klaas - 060000003 - hallo3
ger- 060000004 - hallo4
per - 060000005 - hallo5

volgede

pagina 2

bob - 060000006 - hallo6
johan - 060000007 - hallo7

vorge

holpelijk is mijn voorbeeld duidelijk ik kan hier echter geen duidelijk onbewerkt voorbeeld van vinden
ja maar hoe laat ik overige gegevens op een 2de pagina weer geven
<?php
$sql = "SELECT COUNT(id) FROM `your_table`";
$result = mysql_query($sql)or die(mysql_error());
$tegaan = mysql_result($result,0) - 5;
$sql = "SELECT * FROM `your_table` LIMIT 5,".$tegaan;
$result = mysql_query($sql)or die(mysql_error());
?>
het moet kompakter kunnen maar ik zelf ben niet zo goed nog met querys
ik heb zelf nu dit
het is wel niet zo netjes oppgesteld maar krijg de gegevens niet gedisplayt

<?PHP
include("connect.php");
?>
home </br>
</br>
welkom op support open ticket 0.1.</br></br>

<?php
$berichten_per_pagina = 5 ;

// Tellen totaal aantal berichten voor de navigatie

$nav_result = mysql_fetch_array(mysql_query("SELECT count(*) as pid FROM hp"));
$nav_aantal = $nav_result['pid'];

// de start vars instellen / ophalen en controlle
if(!isset($_GET['start']) || !is_numeric($_GET['start']) || $_GET['start'] > $nav_aantal )
{
$start = 0 ;
}else{
$start = $_GET['start'] ;
}
// De navigatie strings maken vorige / volgende
$vorige = "";
$volgende = "";
if($start > 0)
$vorige = "<< <a href=\"".$_SERVER['PHP_SELF']."?start=".($start - $berichten_per_pagina)."\">Vorige</a>";
if($nav_aantal > ($start + $berichten_per_pagina))
$volgende = "<a href=\"".$_SERVER['PHP_SELF']."?start=".($start + $berichten_per_pagina)."\">Volgende</a> >>";

$gastenboek_sql = "SELECT * FROM hp ORDER BY pid DESC LIMIT ".$start.", ".$berichten_per_pagina." " ;
$gastenboek_result1 = mysql_query($gastenboek_sql);
?>
<?php

{
echo "Name :{$row['CLIENT']} <br>" .
"PID :{$row['PID']} " .
"datum :{$row['DATUM']} <br>" .
"Bericht :{$row['message']} <br>" .
"-----------------------<br><br>" ;
}
?>
<table width="490">
<tr>
<td style="text-align:left"><?php echo $vorige ; ?></td>
<td style="text-align:right"><?php echo $volgende ; ?></td>
</tr>
</table>
@Johan: Waarom toch die idiote backticks in je queries? Wil je soms meer bugs in je code zetten?

Pagination maak je met LIMIT en OFFSET:

SELECT
  kolomnaam
FROM
  tabelnaam
LIMIT 5
OFFSET 0;

Offset krijgt bij pagina 1 de waarde 0, bij pagina 2 de waarde (aantal resultaten per pagina + offset vorige pagina) = 5, bij pagina 3 de waarde (aantal resultaten per pagina + offset vorige pagina) = 10, etc.

De smerige LIMIT die Johan voorstelt kan voor problemen zorgen, LIMIT gedraagt zich dan zeer verschillt, afhankelijk van het aantal parameters. OFFSET voor een offset is eenvoudiger/logischer.
pgFrank schreef op 03.04.2009 13:40
De smerige LIMIT die Johan voorstelt kan voor problemen zorgen, LIMIT gedraagt zich dan zeer verschillt, afhankelijk van het aantal parameters. OFFSET voor een offset is eenvoudiger/logischer.


Hoi, Ik gebruik ook altijd LIMIT 10,20 bijv... Ken je misschien vertellen wat de problemen kunnen zijn die er mee kunnen voorkomen.

Grts,
René
@René:
LIMIT 10 beperkt het aantal resultaten tot maximaal 10 stuks.
LIMIT 10, 20 beperkt het aantal resultaten tot maximaal 20 stuks en begint te tellen met offset 10.

De ene keer heeft de eerste parameter dus de betekenis van een LIMIT (logisch) en de andere keer de betekenis van een offset (niet logisch). Gebruik dan gewoon OFFSET, dan is het duidelijk dat offset offset is.

Probeer zo te programmeren dat het moeilijk wordt om fouten te maken en mocht je toch een fout maken (gebeurt iedereen), dat je de fout dan snel ziet.


LIMIT 10,20;

Of

LIMIT 10,
OFFSET 20;

Bij de 2e variant hoef je niet na te denken wat er hier gebeurt, het is keurig uitgeschreven. Bij de eerste variant kun je eenvoudig een fout maken en er overheen lezen, je kunt aan de syntax niet zien wat de betekenis is van de parameters.

En ja, dit werkt ook al sinds jaar en dag in MySQL.
@pgFrank:
Ohwzo, Ik snap um :) Zoals jij 't beschrijft is het eigenlijk ook een stuk duidelijker terug te vinden in je query.

@johan:
bager wil ik 't niet noemen maar soms blijven ze een beetje steken. zelfde als die backticks die ze gebruiken.

Grts.
René

Reageren