Forum Clubic

Selectionner lignes entre 30 et 60 (PHP/Mysql)

Bonjour à tous. J’ai une petite question :
Je cherche à sélectionner dans une base les lignes dans une certaine plage.
Par exemple, une base constituée de 100 lignes. Si je veux prendre les 30 dernieres, c’est facile, j’ai juste à faire un SELECT * FROM ma_base ORDER BY DESC LIMIT 30. Pour les 30 premières c’est facile aussi. Mais je bloque pour sélectionner celles situés entre 30 et 60 par exemple.
Au départ, je comptais me servir de l’index (qui s’auto-incrémente) en disant, SELECT * FROM ma_base WHERE ‘index’>30 par exemple. Mais ça pose problème si je supprime des lignes.
En fait, je voudrais que quand j’arrive sur la première page de mon site, les 30 premiers messages soit affichés (facile !). Mais au passage de la seconde page, comment faire? Parce que si je dis de partir de l’index 31 avec une LIMIT de 30, ce sera peut-être faux car avant l’index 31, rien ne nous dit qu’il y a effectivement 30 lignes. Si les lignes 25 à 28 de la base sont supprimées, pour la première page, les lignes jusqu’à 33 seront lues. Et pour la deuxième page, si je reprend à 31, il y aura des doublons.

J’espère que certains auront compris quelque chose car je sens bien que je ne suis pas très clair.

Merci d’avance.
Edité le 07/12/2008 à 13:06

En fait, je ne sais pas si c’est plus clair mais je souhaiterai commencer l’affichage à la 31e ligne existante par exemple. Donc, si 3 lignes ont été supprimées, ça me sélectionnerait les lignes de 34 à 63 par exemple. D’ailleurs en fait, je souhaiterai que ça me les affiche de 63 à 34. Enfin ça je suppose qu’un DESC fera l’affaire.

J’ai trouvé, en fait c’est avec LIMIT :
SELECT * FROM ma_base ORDER BY LIMIT 10,30

Ca me sélectionne les champs de 10 à 39. Je voudrais les afficher dans l’ordre inverse mais si je rajoute DESC dans la requête il part de le fin de la table.
Quelqu’un connaît une solution (tri en PHP par exemple, ou une meilleure requête MYSQL)?

préfère la syntaxe limit 30 offset 10 compatible avec pgSQL.

Compte le nombre d’entrées et mets-le dans une variable, disons $nombreEntrees. Puis fais ce code :

$nombreEntrees = $nombreEntrees - 60; // La réponse indique à partir de quel résultat à afficher

Puis, ta requête :

SELECT * FROM ma_base DESC LIMIT $nombreEntrees,30

Selon moi ça fonctionnera.

Effectivement, ça fonctionne. Merci beaucoup !