récupérer certains résultats [mysql] - SQL/NoSQL - Programmation
Marsh Posté le 26-06-2002 à 15:47:27
bien sûr je veux (peux) pas utilser LIMIT sinon ça serait trop facile
Marsh Posté le 26-06-2002 à 15:50:08
bah tu fait un BETWEEN sur ton id
ou un where simple
genre WHERE id<1450 AND id>1400
Marsh Posté le 26-06-2002 à 15:53:10
euh, c pas ça le pb
je veux les résultats de ma requete à partir du 1400e résultat et jusqu'au 1450e résultat.
Marsh Posté le 26-06-2002 à 15:54:01
Si tu veux faire ça en php, sur le site www.php.net (tilt !), j'ai trouvé la fonction mysql_field_seek qui déplace le pointeur de résultat.
Par exemple tu fais :
Code :
|
et la prochaine ligne que tu liras avec mysql_fetch_row sera la numéro 1400
Voir la doc : http://www.php.net/manual/fr/ref.mysql.php
Marsh Posté le 26-06-2002 à 15:54:47
siewn a écrit a écrit : bien sûr je veux (peux) pas utilser LIMIT sinon ça serait trop facile |
d'ailleurs pourquoi tu peux (veux ?) pas utiliser LIMIT ?
Marsh Posté le 26-06-2002 à 15:56:33
Tentacle a écrit a écrit : Si tu veux faire ça en php, sur le site www.php.net (tilt !), j'ai trouvé la fonction mysql_field_seek qui déplace le pointeur de résultat. Par exemple tu fais :
et la prochaine ligne que tu liras avec mysql_fetch_row sera la numéro 1400 |
v voir mais d'après ce que j'ai compris c'est pas exactement ça
Marsh Posté le 26-06-2002 à 15:58:00
Tentacle a écrit a écrit : d'ailleurs pourquoi tu peux (veux ?) pas utiliser LIMIT ? |
parce qu'en fait les enregistrements que je veux récupérer dépendent du nombre de résultats.
disons que je veux les enregistrements de nbresult-200 à nbresult-150
donc il faudrait que je fasse un première requete pour connaitre le nombre de résultat et ça serait 2x plus long
Marsh Posté le 26-06-2002 à 15:58:39
siewn a écrit a écrit : v voir mais d'après ce que j'ai compris c'est pas exactement ça |
bah en tout cas, si après tu fais 50 fois un mysql_fetch_row, tu récupères les lignes 1400 à 1450... si c'est pas ce que tu voulais, faudra que tu reformules ta question
Marsh Posté le 26-06-2002 à 16:00:58
t sûr ?
je test alors
Marsh Posté le 26-06-2002 à 16:02:15
siewn a écrit a écrit : t sûr ? je test alors |
bah si j'ai bien compris la définition de cette fonction ... oui ça devrait marcher
Marsh Posté le 26-06-2002 à 16:08:08
siewn a écrit a écrit : parce qu'en fait les enregistrements que je veux récupérer dépendent du nombre de résultats. disons que je veux les enregistrements de nbresult-200 à nbresult-150 donc il faudrait que je fasse un première requete pour connaitre le nombre de résultat et ça serait 2x plus long |
le count est optimisé, d'après ce que j'ai cru comprendre, il ne parcourt même pas tout les enregs : c'est enregistré dans les infos de la table (pour un select sans where).
en tout cas ça m'étonnerait que ça soit plus lent que de faire ce que tu fais actuellement
Marsh Posté le 26-06-2002 à 16:09:49
SELECT
....
WHERE ROWNUM BETWEEN 1400 AND 1450;
Marsh Posté le 26-06-2002 à 16:11:12
ethernal a écrit a écrit : le count est optimisé, d'après ce que j'ai cru comprendre, il ne parcourt même pas tout les enregs : c'est enregistré dans les infos de la table (pour un select sans where). en tout cas ça m'étonnerait que ça soit plus lent que de faire ce que tu fais actuellement |
en sql server c'était largement le cas en tout cas
Marsh Posté le 26-06-2002 à 16:11:59
ethernal a écrit a écrit : le count est optimisé, d'après ce que j'ai cru comprendre, il ne parcourt même pas tout les enregs : c'est enregistré dans les infos de la table (pour un select sans where). en tout cas ça m'étonnerait que ça soit plus lent que de faire ce que tu fais actuellement |
en fait je pense que ça dépend effectivement de la complexité de la requête... si il y a des where c'est par certain que de faire le count soit plus rapide.
Par contre c'est sûr que si il fait une boucle de 1400 itérations pour récupérer les 50 lignes d'après, ça risque d'être très lent. L'avantage de mysql_field_seek c'est que cette boucle est faite par mysql et qu'il ne renvoie pas le résultat à chaque fois
Marsh Posté le 26-06-2002 à 16:14:07
DarkLord a écrit a écrit : SELECT .... WHERE ROWNUM BETWEEN 1400 AND 1450; |
nonon il veut commencer à un numéro de ligne qui dépend du nombre total de ligne !
Marsh Posté le 26-06-2002 à 16:19:49
c bien ce que j'avais compris, mysql_field_seek sert pas à ça :-(
en fait je crois que ça permet plus de se déplacer entre les champs d'un résultat mais pas entre les résultats
Marsh Posté le 26-06-2002 à 16:24:17
Tentacle a écrit a écrit : nonon il veut commencer à un numéro de ligne qui dépend du nombre total de ligne ! |
ah désolé autant pour moi
Marsh Posté le 26-06-2002 à 16:39:32
essaye avec mysql_data_seek alors : http://www.php.net/manual/fr/funct [...] a-seek.php
int mysql_data_seek ( resource result_identifier, int row_number)
Citation : |
tu étais pas loin Tentacle
Marsh Posté le 26-06-2002 à 20:56:53
ethernal a écrit a écrit : tu étais pas loin Tentacle |
Argh je suis passé à côté
bravo
Marsh Posté le 26-06-2002 à 15:47:03
j'ai ma requete qui me retourne 1600 résultats
mais j'ai uniquement besoin des résultats 1400 à 1450.
le seul moyen (en php) est d'abord de faire une boucle qui tourne 1400 fois dans le vide pour pouvoir ensuite récupérer les enregistrements qui conviennent ?