[mysql] récupérer certains résultats

récupérer certains résultats [mysql] - SQL/NoSQL - Programmation

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 ?

Reply

Marsh Posté le 26-06-2002 à 15:47:03   

Reply

Marsh Posté le 26-06-2002 à 15:47:27    

bien sûr je veux (peux) pas utilser LIMIT sinon ça serait trop facile ;)

Reply

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


---------------
Oui je sais, je suis une merde en orthographe et alors ? Altcoin list: https://docs.google.com/spreadsheet [...] =286417424
Reply

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.

Reply

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 :
  1. mysql_field_seek ($result, 1400);

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

Reply

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 ?

Reply

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 :

Code :
  1. mysql_field_seek ($result, 1400);

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




 
v voir mais d'après ce que j'ai compris c'est pas exactement ça

Reply

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

Reply

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 :)


Message édité par Tentacle le 26-06-2002 à 15:59:24
Reply

Marsh Posté le 26-06-2002 à 16:00:58    

t sûr ?
je test alors


Message édité par siewn le 26-06-2002 à 16:01:14
Reply

Marsh Posté le 26-06-2002 à 16:00:58   

Reply

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

Reply

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 ;)


---------------
...oups kernel error...
Reply

Marsh Posté le 26-06-2002 à 16:09:49    

SELECT  
....
WHERE ROWNUM BETWEEN 1400 AND 1450;


---------------
Just because you feel good does not make you right
Reply

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

Reply

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 :)

Reply

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 !

Reply

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

Reply

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 ;)


---------------
Just because you feel good does not make you right
Reply

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 :


 
mysql_data_seek() retourne TRUE en cas de succès et FALSE sinon.  
 
mysql_data_seek() déplace le pointeur interne de résultat, dans le résultat associé à l'identifiant de résultat result_identifier. Il le fait pointer à la ligne row_number. Le prochain appel à mysql_fetch_row() retournera cette ligne.  
 
row_number commence à 0.


 
tu étais pas loin Tentacle  :jap:


Message édité par ethernal le 26-06-2002 à 16:40:37

---------------
...oups kernel error...
Reply

Marsh Posté le 26-06-2002 à 16:42:01    

merci c'est nickel cette fois :-))

Reply

Marsh Posté le 26-06-2002 à 20:56:53    

ethernal a écrit a écrit :

tu étais pas loin Tentacle  :jap:  




 
Argh je suis passé à côté :)
 
bravo  :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed