Lien suivant et précédent

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

merci d'avance.

12 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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']
3
cs_Benz Messages postés 196 Date d'inscription jeudi 3 janvier 2002 Statut Membre Derniè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
0
cs_titeuf974 Messages postés 70 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 6 février 2007
3 févr. 2007 à 11:51
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!
0
cs_titeuf425 Messages postés 3 Date d'inscription mardi 16 décembre 2003 Statut Membre Dernière intervention 4 février 2007
4 févr. 2007 à 04:53
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kdecherf Messages postés 96 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 18 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)

Pas testé, mais normalement opérationnel

Cordialement,
Kdecherf
0
cs_titeuf974 Messages postés 70 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 6 février 2007
6 févr. 2007 à 03:19
bonjour!!
je vais tester votre solution... je vous tiens au courant!!
merci!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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).
0
cs_titeuf974 Messages postés 70 Date d'inscription samedi 2 avril 2005 Statut Membre Derniè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....

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

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

Cordialement,
Kdecherf
0
Rejoignez-nous