Page 1 sur 1

probleme de requete dans une page

Posté : 05 oct. 2006, 17:59
par jibé001
Bonjour,

Pour commencer, le titre n est pas tres explicite mais je ne savais pas quoi mettre alors je m en excuse d avance...
Je code une galerie photo et j ai un souci à un moment.

En effet, l utilisateur choisi un repertoire a visualiser et clique sur un icone. A partir de là, il peut voir toute les miniatures des photos du repertoire et en cliquant sur une miniature, il voit l image en taille entiere.
J ai codé via une requete la possibilité de visualiser a partir de la grande image, la suivante et la precedente (sans avoir besoin de repasser par la page des miniature).

C est ici que mon script a un petit probleme.
En effet, pour aller en arriere ou en avant, je transmet dans le lien, le nom du repertoire ou il faut aller chercher l image et l id de l image dans la base de donnees.
Grossierement, pour la suivante, j incremente l id de l image visionnée et pour la precedente, je decremente mon id.
Cependant, les id des photos appartenant au meme repertoire n ont pas des id croissants suivant la suite (id=id+1).( La croissance de l id n est pas constante.).
Ex: Pour le meme repertoire, j ai des id :
400, 401, 402, 410,411,414,415,416,.... donc mon algorithme ne fonctionne pas.
Pouvez vous me donner une petite astuce afin d y remedier.

De plus, les photos qui sont visualisables sont uploadées par les membres du sites donc c est tout a fait normal que les id ne suivent pas la regle (id=id+1). puisque si 2 utilisateur mettent des photos en ligne en meme temps, il se peut qu un mette des photo avec les id 400, 401, 404 et l'autre 402,403....

Pour le moment, j ai une solution qui peut etre :
dans ma table photo (id, nom,repertoire,idsoirée) je rajoute un champ position (int )qui serait:

Si le repertoire est vide ou inexistant, je met le champs position =1(on met la 1er photo dans le repertoire).
sinon, je recherche le + grand position qui corresond au repertoire et je l 'incremente de 1 et apres je fais mon insert dans la table photo. Mais je ne sais pas comment on fait en sql pour dire selectionne moi le + grand champs position de la table photo pour le repertoire "babar(par exemple)".

Qu'en pensez vous.
Merci.

Posté : 05 oct. 2006, 18:12
par Vikchill
J'essaie de traduire simplement ce dont tu as besoin: il faut que tu trouves l'image précédente et l'image suivante dans un répertoire donné, c'est bien ça?

J'imagine que le répertoire est une information stockée dans la base, donc en fait il faudrait que tu cherches dans ce répertoire le plus grand id qui soit inférieur à l'id actuel (l'image précédente) ainsi que le plus petit id qui soit supérieur à l'id actuel (l'image suivante).

Il y aurait donc un solution simple en SQL, du type

Code : Tout sélectionner

SELECT max (id) FROM image WHERE reperoire = 'repertoire_actuel' AND id < id_actuel

Code : Tout sélectionner

SELECT min (id) FROM image WHERE reperoire = 'repertoire_actuel' AND id > id_actuel
J'aime pas trop balancer de code sans pouvoir tester, mais peut-être pourras-tu essayer et nous dire ce que ça donne.

Posté : 05 oct. 2006, 18:18
par jibé001
Salut,

Alors oui c'est bien max que je cherchais.
Merci ça marche.

Posté : 19 janv. 2007, 10:53
par Invité
J'essaie de traduire simplement ce dont tu as besoin: il faut que tu trouves l'image précédente et l'image suivante dans un répertoire donné, c'est bien ça?

J'imagine que le répertoire est une information stockée dans la base, donc en fait il faudrait que tu cherches dans ce répertoire le plus grand id qui soit inférieur à l'id actuel (l'image précédente) ainsi que le plus petit id qui soit supérieur à l'id actuel (l'image suivante).

Il y aurait donc un solution simple en SQL, du type

Code : Tout sélectionner

SELECT max (id) FROM image WHERE reperoire = 'repertoire_actuel' AND id < id_actuel

Code : Tout sélectionner

SELECT min (id) FROM image WHERE reperoire = 'repertoire_actuel' AND id > id_actuel
J'aime pas trop balancer de code sans pouvoir tester, mais peut-être pourras-tu essayer et nous dire ce que ça donne.