Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Obtenir les derniers enregistrements MYSQL

6 réponses
Avatar
Kevin Denis
Bonjour,

j'utilise une base mySQL en version 3.

J'ai besoin de récupérer les 'x' derniers enregistrements (x variant
entre 10 et 500, mettons).

Ma table peut contenir selon les moments entre quelques lignes (voir vide)
ou plusieurs millions de lignes.

J'utilise une requête:
select * from ma_table where colonne=id limit 50

Est ce la bonne manière de faire? En fait, la question porte plus
sur la pertinence de ce mode de fonctionnement lorsque la table
fait plusieurs millions de lignes. La commande traite la
table entière et tronque aux 50 dernières, ou bien part de la fin et
remonte jusqu'a obtenir 50 enregistrements?

Merci
--
Kevin

6 réponses

Avatar
Patrick Mevzek
Le Thu, 04 Feb 2010 14:23:01 +0000, Kevin Denis a écrit:
J'utilise une requête:
select * from ma_table where colonne=id limit 50



De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
Avatar
Kevin Denis
Le 04-02-2010, Patrick Mevzek a écrit :
J'utilise une requête:
select * from ma_table where colonne=id limit 50



De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les
50 derniers enregistrements?
--
Kevin
Avatar
Patrick Mevzek
Le Thu, 04 Feb 2010 15:39:08 +0000, Kevin Denis a écrit:
De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les 50
derniers enregistrements?



Commencer par définir "derniers" !
Cela implique un ordre, forcément, donc vous ordonnez sur quel critère ?

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
Avatar
Kevin Denis
Le 04-02-2010, Patrick Mevzek a écrit :
De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les 50
derniers enregistrements?



Commencer par définir "derniers" !
Cela implique un ordre, forcément, donc vous ordonnez sur quel critère ?



Le temps. C'est une table qui enregistre des données de façon monotone.
A chaque fois, c'est un INSERT qui vient se mettre sous la ligne précédente.
Ceci ressemble donc à:
id heure valeur donnée
1 10 3 aaa
2 10 5 bbb
3 10 6 aaa
4 11 3 aaa
etc...
J'ai donc, dans ma requête, besoin de récupérer les 50 dernieres lignes
lorsque valeur=3.

Merci
--
Kevin
Avatar
Sebastien Lardiere
Le 05/02/2010 10:03, Kevin Denis a écrit :
Le 04-02-2010, Patrick Mevzek a écrit :
De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les 50
derniers enregistrements?



Commencer par définir "derniers" !
Cela implique un ordre, forcément, donc vous ordonnez sur quel critère ?



Le temps. C'est une table qui enregistre des données de façon monotone.
A chaque fois, c'est un INSERT qui vient se mettre sous la ligne précédente.
Ceci ressemble donc à:
id heure valeur donnée
1 10 3 aaa
2 10 5 bbb
3 10 6 aaa
4 11 3 aaa
etc...
J'ai donc, dans ma requête, besoin de récupérer les 50 dernieres lignes
lorsque valeur=3.



Il faut donc ajouter dans la table une colonne de type datetime prenant
pour valeur le moment de l'insertion ( default now() ) , puis, lors du
select, trié selon cette colonne ( order by ) , et limité à 50 tuples (
limit 50 )

--
Sébastien
Avatar
Eric Demeester
dans (in) fr.comp.applications.sgbd, Kevin Denis
ecrivait (wrote) :

Bonjour,

id heure valeur donnée
1 10 3 aaa
2 10 5 bbb
3 10 6 aaa
4 11 3 aaa
J'ai donc, dans ma requête, besoin de récupérer les 50 dernieres lignes
lorsque valeur=3.



SELECT * FROM Ma_table WHERE valeur='3' ORDER BY id DESC LIMIT 50;

devrait faire l'affaire si on suppose qu'id s'auto-incrémente. Ajouter
un timestamp comme suggéré par Sébastien serait néanmoins plus propre.

Dans ce cas, on aurait "ORDER BY champ_timestamp DESC".

--
Eric