2009-02-18 8 views
1

J'ai un site qui stocke un tas d'enregistrements dans une base de données sql que je veux tirer sur une page basée sur la date, qui est stockée comme Y-m-d en sql. Mais, je veux paginer les résultats basés sur le jour. Donc, pour l'index, je veux montrer tous les résultats du jour en cours, pour lesquels j'allais utiliser la fonction php date() comme le WHERE dans mon QUERY. Mais je suis un hic en faisant la pagination. Je veux avoir des boutons en bas qui vont à la page suivante avec un get, donc index.php? Page = 2 serait demain, mais je ne peux pas savoir comment sélectionner "demain" de manière fiable à partir de la base de données dans mon O WH. Voyez, j'allais utiliser date ("U") pour obtenir l'heure unix en secondes du premier jour sur la première page et ensuite ajouter 3600 * $ _ GET ['page'] pour incrémenter la date sur les pages suivantes, mais cela semble être une façon bâclée de le faire qui pourrait finir par me brouiller. Est-ce le seul moyen ou existe-t-il une solution meilleure et plus pratique - merci beaucoup, les gars, je l'apprécie.Pagination dépendante de la date PHP

Répondre

1

Si la page 2 est demain, alors vous allez être regarder quelque chose comme ceci:

$days_ahead = $page - 1; 
$query = "... WHERE date = DATE(NOW()) + INTERVAL $days_ahead DAY ..."; 

Notez que cela fonctionnerait bien sur la première page aussi (en supposant $ page se fait défaut à 1) , il ajouterait 0 jours à la date d'aujourd'hui.

0

Vous expérience avec strtotime:

$sqldate = date('Y-m-d', strtotime('+2 days')); 
+0

strtotime bousille, comme je ne pense pas que c'est comment vous l'implémenter dans la fonction de date, je reçois 1969-12-31, peu importe ce que la page $ est –

+0

Hmm, ça marche pour moi. date prend deux paramètres: une chaîne de formatage et un horodatage facultatif. strtotime génère un horodatage à partir d'une chaîne presque arbitraire. (Parfois, il semble que c'est magique ...) –

+0

le problème im ayant est d'intégrer une variable dans strtotime, par exemple strtotime ("+ '$ page' jours") ne l'ayant pas –

0

Voilà comment je réussi à le fixer pour mon site

//'page' is a GET variable from url 
if($page<=1) { 
    $datemax = time(); 
    $datemin = time() - (1 * 2592000); //2592000 being seconds in a month 
} 
else{ 
    $datemax = time() - (($page - 1) * 2592000); 
    $datemin = time() - ($page * 2592000); 
} 

Et puis évidemment la requête ressemblera à quelque chose comme

SELECT * FROM posts WHERE dateposted >=$datemin AND dateposted <=$datemax