2010-07-15 6 views
2

La façon dont je fais mon est maintenant mise en page suivante:PHP/MySQL Pagination avec une requête

===============
D'abord, je fais la requête normale, et récupère tous les résultats.

Après que je compte les résultats, disons 300. Je le fais avec NUM_RESULTS

Maintenant, je vérifie à quelle page l'utilisateur veut, et la limite, disons 30,10.

dernière, je ne la nouvelle requête, avec la limite sélectionnée.

===============

En utilisant cette méthode, je fais presque deux fois la même requête, est-il pas d'autre façon de le faire, en un seul coup.

Répondre

8

Oui, vous pouvez utiliser le SQL_CALC_FOUND_ROWS exactement à cet effet.

select SQL_CALC_FOUND_ROWS something from table limit 30,10

De cette façon, vous pouvez toujours obtenir le nombre de lignes normalement récupérées quand ne pas utiliser la clause limite.

+0

Wow nice Je vais essayer ça! –

+0

@Dennis Haarbrink: Je pense que cela peut introduire une situation de poulet et d'oeuf. Si le nombre de lignes est requis pour calculer les ensembles de pagination à afficher (disons 30 pages chacune avec 10 éléments), alors le nombre de lignes doit être retourné en premier. À ce stade, l'utilisateur peut choisir quelle page afficher. L'utilisation de 'SQL_CALC_FOUND_ROWS' signifie que le nombre de lignes est renvoyé * après que * l'utilisateur ait sélectionné la page à afficher. – Mike

+0

@Mike: Je suppose que le nombre d'éléments par page est une «constante» et avec le nombre total de lignes, vous pouvez déterminer le nombre de pages. Alors disons que vous voulez la page # 3, le décalage devient '$ num_pages * $ records_per_page'. –