Page 1 sur 1

MySQL, séléctionner précédent/suivant

Posté : 06 mars 2007, 00:59
par lux
Hello tout le monde.

J'ai un peu cherché partout, mais rien trouvé. Je résume mon code à la partie qui m'intéresse.
J'explique : j'ai une table (rel), avec une colonne appelé "pos", avec des chiffres dedans : 1,2,3,4,5 etc... (chaque ligne a donc une position).
Maintenant pour l'affichage, je faisais toujours un :
//Je reçois la position par un GET, je la stocke dans $pos
.
.
.
//J'affiche ce que je dois afficher pour cette position
.
.

$limiteprecedente = $pos - 1;

$select = "SELECT id_file FROM rel WHERE pos='$limiteprecedente'";
$result = mysql_query($select) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$id_file_precedente = $row[0];

//Puis affichage du lien avec la valeur $id_file_precedente pour aller sur la page précédente
.
.
.
//Je fais la même chose avec $limitesuivante = $pos + 1;
.
.
.
La difficulté vient du fait que par exemple, j'efface la ligne avec la position 4. Si je suis en position 3, il va me faire 3 + 1, et rien trouver dans la requète SQL, vu que cette ligne n'existe plus.
Donc comment écrire ma requète SQL pour qu'il aille a la prochaine occurance de position, la 5 dans ce cas la. Et inversément pour la précédente.

(P.S. j'ai pensé faire un script avec des vérifications jusqu'a ce qu'il tombe sur la bonne valeur suivante/précédente, sachant que le "trou" peut être plus grand (genre on a : 1,2,3,6,7,8), mais je sens que ça va être assez lourd)
J'ai posté dans la partie base de donnée, car j'aimerais une requète SQL qui me fait ceci.
Donc si quelqu'un pouvait me donner un indice ce serait sympa, merci d'avance :wink:

Posté : 06 mars 2007, 03:22
par guilt92
Bonjour,

je ne suis pas sur de bien comprendre ton probleme mais je vais essayer... En gros si j'ai bien compris tu récupère une valeur $pos qui est la position courante et tu voudrais afficher la suivante.

Je te conseille si c'est cela d'utiliser l'attribut LIMIT de mysql qui te permet de selectionner un certain nombre de résultat à partir d'un certain point.

Ainsi par exemple si tu récupère $pos et que tu veux le résultat suivant dans ta base tu peux utiliser une requete du type :

"SELECT * FROM table ORDER BY pos ASC LIMIT $pos,1";

Le résultat sera le suivant : la requete classe les résultat par position ascendantes, et il prend 1 résultats juste après $pos.

J'espère que cela t'aidera.

EDIT: pour selectionner le résultat précédent il suffit de faire la même manipulation en triant par ordre décroissant ;)

Posté : 06 mars 2007, 18:09
par lux
Dans l'idée générale j'ai compris.
Ça devrait marcher mais si j'ai par exemple :
"SELECT pos FROM rel ORDER BY pos ASC LIMIT $pos,1"
Ainsi je récupère théoriquement la valeur suivante ...
Mais ça n'a pas l'air de marcher comme je veux. Disons que j'ai les valeurs de pos : 1,2,4,5.
Si pos=1, il trouve comme valeur suivante 2
Si pos=2, il trouve comme valeur suivante 4
Si pos=4, il ne trouve rien (alors qu'il devrait trouver 5).

(Si il n'y a pas de trou, donc que le 3 ne manque pas, ça marche nickel)
Donc ou est l'erreur ?

EDIT : au passage, sur mon localhost, MySQL 5.0.19, cette syntaxe il aime pas trop ... :
Erreur : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

Posté : 07 mars 2007, 01:49
par lux
Pour avancer, ce que j'ai fait, lorsque je crée ce trou dans la table, je fais maintenant un UPDATE automatique, qui remets toutes les positions dans le bon ordre.
Donc je vais pourvoir continuer à utiliser $pos + 1 et $pos - 1.

Mais si qqn a une idée pour cette histoire de position, ça m'interresse toujours :wink: