Comment remplacer un LIMIT avec une base Access ?

timisan Messages postés 10 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 8 septembre 2005 - 7 sept. 2005 à 01:40
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 - 8 sept. 2005 à 23:48
Bonjour,
je fais une petite application en PHP avec une base de données Access. D'habitude j'utilise MySQL et pour afficher mes enregistrements par page avec un numéro de page j'utilise cette requete :
SELECT * FROM table LIMIT $limit, $enreg_par_pg
($limit : à partir de quel enregistrement on affiche la page
$ enreg_par_pg : nombre d'enregistrement par page)
pour afficher les enregistrements d'une table par ex par 8 enregistrements affichés par pages. Là je voudrais faire la même chose mais la fonction LIMIT n'existe pas en SQL , connaissez vous autre chose ?
Merci beaucoup pour votre aide....
Isabelle

12 réponses

Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
7 sept. 2005 à 05:02
Salut Isabelle,


Par le code tu peux limitter le nombre de valeur en utilisant un
compteur et en sortant de ta boucle de parcours du RecordSet ... Vu que
j'ignore la méthode de connexion que tu utilises, je ne peux pas te
donner de code d'exemple.


En PHP, tu peux utiliser SelectLimit avec ADOdb



Mais si tu préféres le faire dans une requête SQL alors la synthaxe c'est avec TOP suivit du nb de lignes.

Par exemple, pour afficher 5 lignes :










SELECT TOP 5 champ1, champ2 FROM table ...




<hr size="2" width="100%">


++

Zlub
0
timisan Messages postés 10 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 8 septembre 2005
7 sept. 2005 à 22:57
Bonjour ! Merci beaucoup pour ta réponse je fais des tests tout de suite !
PS : je suis en Nouvelle Calédonie alors les jours et temps de réponses sont décalés ....
Isabelle
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
7 sept. 2005 à 23:24
Salut Isabelle,



Pas de problème, je suis moi aussi "décalé" ... LOL


Tiens moi au courrant,


++

Zlub
0
aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
8 sept. 2005 à 18:04
salut,

la solution donnée est une solution pour les premiers enregistrements mais pour les suivants?

car TOP 8 prend toujours les 8 premiers résultats... (du num 1 au num
8). Mais quand on passe à la page suivante et que l'on souhaite donc
visualiser les résultats de 9 à 16, la solution de substitution ne
marche pas à mon avis...
0

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

Posez votre question
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
8 sept. 2005 à 18:18
Salut,

Bien evidament
que non ... ça limite le nombre de résultats dans le RecordSet à X
lignes ... Pour afficher par "tranche" de X lignes ... quelque soit le
langage, je ne vois pas la difficultée ...



Je demande à un RecordSet de me rappatrier les données, apres tout se
qui est affichage doit être, selon moi, géré par le code ...

++

Zlub
0
aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
8 sept. 2005 à 18:50
ok donc on est d'accord que ce n'est pas une solution pour la question d'Isabelle...
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
8 sept. 2005 à 19:29
Salut,

Il n'existe
pas de correspondance exacte avec LIMIT de MySQL sous MS ACCESS ...







<meta http-equiv= "Content-Type" content="text/html;charset=UTF-8"><title>users</title>


<caption> users </caption>

----

id |
nom |
prenom |

----

10,
Big,
Bang,

----

3,
bob,
le marin,

----

7,
Bond,
James,

----

5,
Dubois,
alain,

----

2,
martin,
alain,

----

1,
martin,
paul,

----

8,
Poiuy,
Anlk,

----

4,
ponce,
pierre,

----

9,
Woila,
Jean,

----

11,
rata,
alain

<tfoot></tfoot>





Avec la clause WHERE, elle peut simuler le LIMIT par exemple en
conservant l'id de la last ligne affichée et lorque l'utilisateur
demande la page suivante alors :



SELECT TOP 2 users.id, users.nom, users.prenom

FROM users

WHERE id > 2






A condition, bien sûre, que les données précédement affichées soient
triées par ID croissant (cas par défaut). Sinon, faut completer la
clause where en utilisant un max d'infos possibles. Par exemple pour un tri par nom ASC



SELECT TOP 2 users.id, users.nom, users.prenom

FROM users

WHERE nom > 'martin'

ORDER BY users.nom, users.prenom ASC;





Cette stratégie peux poser probléme en cas de doublons ... donc faut sans doute préciser un autre argument dans le WHERE soit par exemple pour un tri par nom, prénom ASC



SELECT TOP 2 users.id, users.nom, users.prenom

FROM users

WHERE nom > 'martin' or (nom = 'martin' and prenom <> 'paul')

ORDER BY users.nom, users.prenom ASC;





Au final, TOP est la correspondance la plus proche de LIMIT, bien que l'impémentation de Microsoft soit imcompléte.






++

Zlub
0
aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
8 sept. 2005 à 19:37
ok

c'est déjà + complet et une manière "alternative"
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
8 sept. 2005 à 19:46
Salut,

B'hein, je pensais qu'elle allais pouvoir se débrouiller comme une grande avec TOP ...

Mais bon c'est vrai que c'est plus complet ...

++

Zlub
0
timisan Messages postés 10 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 8 septembre 2005
8 sept. 2005 à 23:42
Bonjour à tous, Déjà merci d'avoir répondu à mes questions ! Pour vous dire je n'ai pas encore eu le temps de faire les tests parce que je suis overbookée avec le boulot, mais j'ai eu le temps de faire le test avec la fonction top et c'est vrai quelle permet uniquement d'afficher des enregistrements sélectionnés (par ex seulement 6 et c'est tout). Moi en fait ce que je voudrais c'est afficher des enreg par page (genre 8) et sur la page suivante encore 8 etc... Donc la valeur à afficher de l'enreg est affectée dans la page passée en php (ouhla je sais meme pas comment expliquer !) et la requete sql affiche les enregistrement par ex de 1à8 après c'est de 9 à 16, ensuite etc ...
Je vais me débrouiller aujourd'hui et je vous mets au courant.
Thks a lot folks !
0
timisan Messages postés 10 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 8 septembre 2005
8 sept. 2005 à 23:46
Je n'avais pas vu le message qu'avait posté zlub, et ça résoud mon problème, c'est la solution que je cherchais ! Merci beaucoup !
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
8 sept. 2005 à 23:48
Salut Isabelle,

J'ai bien compris se que tu voulais faire ... voir mon post de 19:29:08

En suivant cette méthode, tu devrais pouvoir faire se que tu veux...


++

Zlub
0
Rejoignez-nous