Je vais prendre un exemple basique. Prenons une requête toute simple.
$sql = "[code]SELECT champ_1, champ_2 FROM table_1 WHERE champ_1 = 'condition 1'[/code]";
Là, j'ai une base de départ qui me permet d'avoir le nombre de lignes répondant aux critères de tri de la clause WHERE. Si tu es d'accord jusque là, continuons. Je récupère donc le résultat et le nombre de lignes:
$resultat = mysql_query($sql);
$total = mysql_num_rows($resultat);
Voilà, maintenant, je connais (virtuellement s'entend) le nombre total de ligne de la requête de base.
Note que jusqu'à maintenant, j'ai complètement zappé le coté nombre par page, je veux le total. Ceci étant obtenu, je veux maintenant n'en avoir qu'une partie. Il me faut plusieurs paramètres :
- le total, je l'ai déjà;
- le nombre que je veux afficher par page;
- le nombre de pages que ça représente;
- à partir de quelle ligne je commence à récupérer mes informations;
Ajoutons ces trois paramètres manquants jusqu'à maintenant:
$nb_par_page = 10;
$nb_de_pages = ceil($total / $nb_par_page);
$debut = isset($_GET['page']) ? ($_GET['page'] * $nb_par_page) : 0;
Passons aux explications détaillées :
-
$nb_par_page : ici, je mets 10, mais tu peux choisir le nombre de ton choix.
-
$nb_de_pages : j'utilise la fonction
ceil() pour avoir un entier. Sinon, avec 23 lignes, j'obtiendrais 2,3 pages, ce qui est idiot. J'arrondis donc à l'entier supérieur ce qui va me donner 3;
-
$debut : Là, je prépare aussi ma clause LIMIT qui doit avoir deux paramètres, la ligne de début et le nombre de ligne que nous avions déjà. Je vérifie si j'ai un numéro de page en cours dans l'url avec isset($_GET['page']) (paramètre qu'il ne faudra bien entendu pas oublier d'ajouter dans tes liens de navigations). Si j'ai une valeur, alors je l'assigne à la variable, sinon, je viens d'arriver sur cette page pour la première fois et j'établis donc le début à 0. Note aussi que mon point de départ n'étant dans la requête pas un numéro de page mais un numéro de ligne, je multiplie le numéro de la page par le nombre de ligne par page.
Nous avons maintenant les éléments pour mettre une "rallonge à notre requête (Note bien le "." de concaténation juste avant le "=") :
$sql .= " LIMIT ". $debut .", ". $nb_par_page .";"
Ce qui va nous donner en requête complète:
Code : Tout sélectionner
SELECT champ_1, champ_2 FROM table_1 WHERE champ_1 = 'condition 1' LIMIT 0, 10;
Voilà, je vois difficilement comment t'expliquer plus clairement. Un simple conseil pour l'instant quand même: n'essaye pas de penser trop d'avance à la fin de ton code: vas-y étape par étape en te concentrant sur l'étape en cours et celle que tu prépares davantage que sur les dix prochaines.