cs_titeuf974
Messages postés70Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention 6 février 2007
-
3 févr. 2007 à 11:03
Kdecherf
Messages postés96Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention18 avril 2007
-
6 févr. 2007 à 19:39
Bonjour!!
Voila, en fait je bute sur un petit problème...
j'ai des données enregistrés dasn une table .
j'affiche donc sur une page un enregistrement qui a l'id 5 par exemple.
je voudrai faire un lien pour afficher le precedent et le suivant.
alors moi je pensais qu'il suffisait de faire un lien avec
comme variable id-1 (pour precedent) et id+1 (pour suivant).
le problème est que j'efface régulièrement des données, donc je me retrouve avecdes trous...
par exemple, j'ai efface celui qui a l'id 4, donc si je fait
precedent avec la methode cité plus haut, j'aurai une erreur !!! :(
je voudrai donc pouvoir trouver une methode pour trouver l'id le precedent et suivant le plus proche.
Une idée?? une piste??? Ca serait bien sympa!!!!
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 3 févr. 2007 à 11:57
Hello,
Ou bien tu passes ton id - ou + 1, avec la direction (-, ou +).
Et quand tu réaffiches ta page avec ces 2 nouvelles variables, tu fais ta requête de cette façon, pour aller chercher l'ID correct :
si $_GET['dir'] === '+' alors : SELECT MIN(id) FROM tatable WHERE id >= $_GET['id']
si $_GET['dir'] === '-' alors : SELECT MAX(id) FROM tatable WHERE id <= $_GET['id']
cs_Benz
Messages postés196Date d'inscriptionjeudi 3 janvier 2002StatutMembreDernière intervention 7 juin 2007 3 févr. 2007 à 11:26
Bonjour titeuf974,
Je ne connais pas la procédure exacte pour faire ce que tu veux en PHP, mais tu peux chercher du coté de la pagination.
Ce qu'il faut je pense, c'est faire une requete sur la totalité des fiches dont tu as besoin et n'en affiche qu'une par page. C'est le même principe que lorsque tu as une très grande liste mais que pour des raison pratiques tu n'en affiche que 20 par page.
Exactement ce que fais ce site dans la page de résultat par exemple. Là, tu n'auras plus aucun problème avec tes trous.
C'est juste une piste, mais j'espère que ca t'aidera à trouver le bon code.
Benoit
<hr size="2" width="100%" />Besoin d'argent ? Domicile-Job >> Travail à domicile
Envie de jouer ? Le Sanktuaire >> Ressources jeux de roles
Kdecherf
Messages postés96Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention18 avril 2007 5 févr. 2007 à 20:38
Bonsoir, une autre possibilité :
$previous = 0;
$next = 0;
$request = mysql_query("La requete ... ORDER `id` ASC");
while ($rest = mysql_fetch_array($request))
{
if ($rest['id'] == $idrecherche)
{
// code à executer
}
else if ($rest['id'] < $idrecherche)
{
$previous = $rest['id'];
}
else if ($rest['id'] > $idrecherche)
{
$next = $rest['id'];
}
}
// On affiche le résultat final, avec pour id précédent $previous, et suivant $next
Ici on n'a pas besoin de comparer les valeurs existantes avec les valeurs allant être assignées à $next ou $previous puisque les requêtes sont classées selon l'ordre croissant 'id' (nécesssite que le champ soit de type INT ou un dérivé de INT)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 6 févr. 2007 à 08:01
Heu...cette dernière solution est particulièrement bourrine...sans vouloit vexer son auteur, on peut difficilement faire pire. Je te la déconseille. Tu parcours TOUT ton jeu de résultat dans une boucle pour en récupérer 2 valeurs seulement...Et en plus, le résultat va être faux.($next sera tjrs le dernier id de ta base, jamais le "prochain" par rapport à ton id courant).
cs_titeuf974
Messages postés70Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention 6 février 2007 6 févr. 2007 à 10:50
ahhhh... vu comme ça... et que pensez vous de ma solution ?? Potable ou peut faire mieux ?? Je viens de réussir à faire fonctionner votre solution. Mon script générait une erreur dont je viens de trouver l'origine. Votre solution m'a l'air bien plus simple en fait....