Une galerie de photo optimisée ?

VaN
Mammouth du PHP | 1107 Messages

29 nov. 2006, 16:43

Bonjour,

je travaille sur une galerie de photos, et j'aimerais rendre l'affichage de cette galerie le moins lourd possible en requetes pour le serveur.

J'affiche 15 photos par page. Si il reste des photos à afficher, j'affiche un lien 'suivant'.

Si $page > 1, j'affiche également un lien précédent.

Or, j'ai un petit problème. Ma requête qui va chercher les photos ds la base est la suivante :
$sql =	"SELECT *
				FROM PHOTOS
				WHERE photo_style_id = '".$_GET['id']."'
				ORDER BY photo_id
				LIMIT ".($page - 1) * $displayed.",".$page * $displayed;
les variables :
$page : le numéro de la page en cours.
$displayed : le nombre de photos affichées par page (ici, 15)

Le problème est que je n'arrive plus à savoir si il y'a plus de 15 photos ds ma base. A l'origine, je récuperais ce nombre de photos total avec une requete sans LIMIT, et un compteur $count qui s'incrémentait à chaque tour de boucle. si $count > 15, je fermais la boucle, et affichait mon lien 'suivant'. J'ai changé de requête pour avoir quelques chose de plus propre.

Suis-je obligé de rajouter une deuxième requete, sans LIMIT, pour connaitre mon nombre max de photos ? Puis-je alors supprimer ma reqûete avec LIMIT, et garder un système de 'suivant/précédent' qui fonctionne ?

Selon vous, comment se fait une galerie, au niveau des requêtes ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 nov. 2006, 17:13

Moi je verrais bien une seconde requête qui ne ferait qu'un count(*) (sans limit donc) pour connaitre simplement le nombre de résultat total en base :)
C'est généralement la requête la plus optimisée pour une base de données :)

Par ailleurs, m'est avis que tu dois avoir un soucis avec ton limit, qui va t'afficher de plus en plus d'enregistrement à chaque page au lieu de n'en ramener que 15 à chaque fois ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 23 Messages

29 nov. 2006, 18:55

Moi je verrais bien une seconde requête qui ne ferait qu'un count(*) (sans limit donc) pour connaitre simplement le nombre de résultat total en base :)
Je dirais même plus : COUNT (photo_id), pour ne compter les occurrences d'un seul champ indexé, ce qui s'avère (un peu) plus rapide que de compter tous les champs, surtout s'il y a beaucoup d'enregistrements ;)

VaN
Mammouth du PHP | 1107 Messages

30 nov. 2006, 15:44

Par ailleurs, m'est avis que tu dois avoir un soucis avec ton limit, qui va t'afficher de plus en plus d'enregistrement à chaque page au lieu de n'en ramener que 15 à chaque fois ;)
J'eessaye de comprendre ta phrase. Est ce que j'aurai mal lu la doc sur LIMIT ? la deuxieme valeur indique le nombre de ligne à prendre, et non la ligne a laquelle s'arreter ?

Je devrai donc l'utiliser comme ceci ?
LIMIT ".($page - 1) * $displayed.",".$displayed;

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 nov. 2006, 15:46

Toutafé ! :)
Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner.
http://dev.mysql.com/doc/refman/5.0/fr/select.html
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...