Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2006, 13h15   #1
Rédacteur
 
Homme Jean-Pierre
Inscription : août 2005
Messages : 333
Détails du profil
Informations personnelles :
Nom : Homme Jean-Pierre
Âge : 26
Localisation : Suisse

Informations forums :
Inscription : août 2005
Messages : 333
Points : 442
Points : 442
Par défaut [SGBD]Pagination spécifique de résultats

Bonjour,

Petite problème à résoudre, probablement bien plus simple vu d'ailleurs

La situation :

Une table MySQL classique, table_news, avec N rangées et une clé primaire entière autoincrementée.

Le problème :

Dans cette table, des rangées sont suceptibles d'être effacées, et leur clé avec, ce qui provoquera des écarts dans l'autoincrémentation.

Je souhaite que lorsque le visiteur clique sur une news, il obtienne sur la même page, la news selectionnée ainsi que deux liens, l'un vers la news précédente (si elle existe) et l'autre vers la news suivante (si elle existe).

J'ai essayé de jouer sur la close "LIMIT", en indiquant respectivement que la news suivante (théorique) est l'ID courant de la news + 1 donc, ce qui donne ce genre de requête

Code :
1
2
 
SELECT * FROM table_news LIMIT (ID_Courant), 1
Pour la news précédente, ID_Courant - 2
Code :
1
2
 
SELECT * FROM table_news LIMIT (ID_Courant-2), 1
Cette solution fonctionnerait tant que les clés se suivraient numériquement... Evidemment c'est pas la bonne solution...

Une autre solution (bêtise=) consiterait à obtenir systèmatiquement tous les résultats de la table, pour ensuite jouer sur le pointeur interne avec des num_rows et autres data_seek...

Autre solution ? changer le type de clé ? utiliser un autre type de champ unique ?

Il me manque un élément...J'ai du passé à coté de la soluce plus d'une fois...

Merci d'avance !
Guardian_7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 13h38   #2
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
Heu une piste :

Les éléments précédents :
Code :
1
2
 
SELECT tab_id FROM table_news WHERE tab_id< (ID_Courant) ORDER BY tab_id DESC LIMIT 2
Tu récupères les 2 id précédents

ET inverse pour les suivants
Code :
1
2
 
SELECT tab_id FROM table_news WHERE tab_id> (ID_Courant) ORDER BY tab_id DESC LIMIT 2
__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 13h44   #3
NoT
Membre confirmé
 
Inscription : février 2004
Messages : 237
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 237
Points : 261
Points : 261
Salut,

Tu dois passer par une requête qui va chercher l'id de la news précédente ( s'il y en a une ) et l'id de la news suivante ( idem ) .

D'une façon générale tu peux l'obtenir comme ça :

$mon_id_news = id de la news actuellement affichée

News précédente :

Citation:
SELECT MAX(news_id) AS PREC FROM news WHERE news_id < $mon_id_news
News suivante :

Citation:
SELECT MIN(news_id) AS SUIV FROM news WHERE news_id > $mon_id_news
Voili

Edit : la solution de hisy marche égualement, à toi de voir laquelle est la plus rapide.
NoT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 15h12   #4
Rédacteur
 
Homme Jean-Pierre
Inscription : août 2005
Messages : 333
Détails du profil
Informations personnelles :
Nom : Homme Jean-Pierre
Âge : 26
Localisation : Suisse

Informations forums :
Inscription : août 2005
Messages : 333
Points : 442
Points : 442
Par défaut Impeccable !

Merci beaucoup pour vos soluces c'est juste ce dont j'avais besoin !

Bonne après-midi !
Guardian_7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h57.


 
 
 
 
Partenaires

Hébergement Web