Aller au contenu

[MySQL] Connaître le numéro d'une ligne dans une requête


Sujets conseillés

Posté (modifié)

Bonjour,

Je fais appel à vos savoirs pour répondre à une problématique relativement simple qui se pose à moi dans le cadre d'une application PHP/MySQL. Pour un système de pagination, j'aimerais pouvoir, avec pour seule donnée la clef primaire désignant un élément, connaître d'avance sa position dans le tableau de résultats retourné par MySQL après une certaine requête.

Exemple :

Admettons que j'ai une table "messages" avec pour clef primaire "id". Chaque message appartient à un topic : ainsi, sa colonne "parent" comporte la valeur de la colonne "id" du topic.

J'aimerais donc pouvoir savoir à quelle ligne correspondra le message que je veux sélectionner lorsque je ferai une requête MySQL du type :

SELECT * FROM `messages` WHERE parent=3 ORDER BY `id` ASC

Tout cela dans le but d'écrire à la place :

SELECT * FROM `messages` WHERE parent=3 ORDER BY `id` ASC LIMIT n, 10

où "n" représente le numéro du message que je veux sélectionner.

Pour l'instant, je ne vois d'autre solution que faire la requête globale et parcourir le tableau jusqu'à trouver le message, et afficher les 10 messages qui suivent, ce qui représente à mon avis un gros gâchis !

Auriez-vous des informations pouvant m'aider ?

Merci !

Modifié par ZeBrian
Posté

Bonjour,

Pourquoi tu n'utilises pas le numéro de la page et le nombre de messages que tu veux afficher par page ? Parce que de toute façon pour un système de pagination, on choisit une page, donc je vois pas pourquoi tu cherches à t'en passer, et surtout comment ;)

EDIT :

Sinon si ta table est "triée" par les id, c'est à dire si tu es en auto-increment, tu peux tout simplement faire :

SELECT * FROM `messages` WHERE parent='3' AND id>'$iddumessage' ORDER BY `id` ASC

Posté

Merci sarc, mais ta réponse ne me convient pas parfaitement '^^

En fait, ma table est bien numérotée par auto_increment, sauf qu'il peut y avoir des messages supprimés qui fausseraient donc le décompte. D'autre part, je suis parfaitement d'accord qu'utiliser le numéro de page est infiniment plus logique, c'est d'ailleurs ce que je fais généralement !

Seulement ici, le problème est différent : en fait, c'est la situation où l'utilisateur vient d'éditer son message. Après avoir validé le formulaire de modification, il semble logique qu'il soit redirigé vers la page contenant son message ! Or je ne vois aucun moyen de connaître la page exacte par une simple requête MySQL...

Une solution parfaitement fonctionnelle serait, lorsque l'utilisateur clique sur le bouton "éditer", de passer en paramètre le numéro de la page où il se trouve actuellement... Seulement, j'aimerais par simple curiosité savoir s'il y a une alternative avec MySQL :)

Posté

Je sais pas comment tu gères les messages supprimés, mais en quoi ils posent un problème dans le décompte ?

Il suffit de passer en paramètre tous les éléments qui font que tu auras uniquement les messages qui t'intéressent...

Les auto-increment ne retournent pas en arrière, si y'a des trous dans la BDD, ils ne sont pas reremplis, de telle sorte que les id restent en ordre croissant (à part si tu fais des manipulations bizarres).

Explique donc précisément avec la structure de ta table ce qui te pose problème, parce que pour moi la requète que je t'ai donnée (en rajoutant LIMIT 10 à la fin) fonctionne sans soucis...

Posté (modifié)

Excuse-moi de ne pas avoir été clair, en fait le problème est que je ne peux pas avec ce code connaître le numéro de la page à laquelle on se situe actuellement !

En tout cas merci des tes réponses ;)

EDIT : Ehm excuse du dérangement, je viens de penser que cela fonctionnera à merveille :

SELECT COUNT(*) FROM `messages` WHERE parent='3' AND id < $n

Encore désolé d'avoir posé une question aussi bête :S

Modifié par ZeBrian
Posté

Ah d'accord, je n'avais pas compris que tu voulais la page...

SELECT ceil(count(id)/10) AS page FROM `messages` WHERE parent='3' AND id<'$iddumessage'

A quelques modifications près, ça te renvoie la bonne page :P

EDIT : tu as été plus rapide.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...