Lien suivant et précédent [Résolu]

cs_titeuf974 70 Messages postés samedi 2 avril 2005Date d'inscription 6 février 2007 Dernière intervention - 3 févr. 2007 à 11:03 - Dernière réponse : Kdecherf 96 Messages postés mardi 9 janvier 2007Date d'inscription 18 avril 2007 Dernière intervention
- 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!!!!

merci d'avance.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 févr. 2007 à 11:57
3
Merci
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']

Merci malalam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 119 internautes ce mois-ci

Commenter la réponse de malalam
cs_Benz 196 Messages postés jeudi 3 janvier 2002Date d'inscription 7 juin 2007 Dernière intervention - 3 févr. 2007 à 11:26
0
Merci
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
Commenter la réponse de cs_Benz
cs_titeuf974 70 Messages postés samedi 2 avril 2005Date d'inscription 6 février 2007 Dernière intervention - 3 févr. 2007 à 11:51
0
Merci
je vois ce que tu veux dire. c'est pas bête! je vais jeter un oeil pr voir s'il y possibilité de coder un truc...
merci!
Commenter la réponse de cs_titeuf974
cs_titeuf425 3 Messages postés mardi 16 décembre 2003Date d'inscription 4 février 2007 Dernière intervention - 4 févr. 2007 à 04:53
0
Merci
Bonjour!
j'ai testé un peu toutes les solutions, pour arriver à un résultat qui ressemble à ça :

//je fais la requète

$query = "SELECT id_article,id_item,titre_article,titre_item FROM table1,table2 WHERE ......
$result = mysql_query($query) .......

//cette requète me donne tous les article d'un thème. ensuite j'éxécute la requète et je crée un tableau qui contient le résultat de ma requète

$array_resultat = array();

foreach($result as $contents) {
 
          array_push($array_resultat,array("id_article" => $contents['id_article'],"id_item" => $contents['id_item'], "titre_article" => $contents['titre_article']));
}

//ensuite je parcours le tableau des résultats avec une boucle for et j'affiche mes liens

$nbre = count($array_resultat);

for($i= 0;$i<$nbre;$i++) {
                                                                                       
          //lien précédent. $id_article, est l'article courant que je passe en get
        
          if($array_resultat[$i]['id_article'] == $idarticle AND $i-1>=0) {
                  
                         echo $array_resultat[$i-1]['titre_article'];
                                                                                       
           }
           
            //lien suivant.                                                                     
            if($array_resultat[$i]['id_article'] == $idarticle AND $i+1<$nbre) {
                                                                                         
                           echo $array_resultat[$i+1]['titre_article'];
            }
                                                                               
}

Voila. un peut tiré par les cheveux je pense, mais ça fonctionne... Qu'en pensez vous???

Merci...
Commenter la réponse de cs_titeuf425
Kdecherf 96 Messages postés mardi 9 janvier 2007Date d'inscription 18 avril 2007 Dernière intervention - 5 févr. 2007 à 20:38
0
Merci
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)

Pas testé, mais normalement opérationnel

Cordialement,
Kdecherf
Commenter la réponse de Kdecherf
cs_titeuf974 70 Messages postés samedi 2 avril 2005Date d'inscription 6 février 2007 Dernière intervention - 6 févr. 2007 à 03:19
0
Merci
bonjour!!
je vais tester votre solution... je vous tiens au courant!!
merci!!
Commenter la réponse de cs_titeuf974
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 6 févr. 2007 à 08:01
0
Merci
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).
Commenter la réponse de malalam
cs_titeuf974 70 Messages postés samedi 2 avril 2005Date d'inscription 6 février 2007 Dernière intervention - 6 févr. 2007 à 10:50
0
Merci
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....

cordialement...
Commenter la réponse de cs_titeuf974
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 6 févr. 2007 à 16:44
0
Merci
Ma solution est plus légère, mais bon.
Là tu fais de grosses boucles pour pas grandchose.
Commenter la réponse de malalam
cs_titeuf974 70 Messages postés samedi 2 avril 2005Date d'inscription 6 février 2007 Dernière intervention - 6 févr. 2007 à 18:11
0
Merci
ok. j'en prend note!
merci!
Commenter la réponse de cs_titeuf974
Kdecherf 96 Messages postés mardi 9 janvier 2007Date d'inscription 18 avril 2007 Dernière intervention - 6 févr. 2007 à 19:36
0
Merci
C'est vrai que c'est bourrin, mais bon :P Tant que ça marche

Cordialement,
Kdecherf
Commenter la réponse de Kdecherf
Kdecherf 96 Messages postés mardi 9 janvier 2007Date d'inscription 18 avril 2007 Dernière intervention - 6 févr. 2007 à 19:39
0
Merci
Re ... Arf oui j'avais pas tilté pour le lien suivant, j'ai été trop rapide, désolé

Cordialement,
Kdecherf
Commenter la réponse de Kdecherf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.