Comment puis-je SELECT
la dernière ligne d'une table MySQL?
J'utilise des INSERT
données et je dois récupérer une valeur de colonne de la ligne précédente.
Il y a un auto_increment
dans le tableau.
Comment puis-je SELECT
la dernière ligne d'une table MySQL?
J'utilise des INSERT
données et je dois récupérer une valeur de colonne de la ligne précédente.
Il y a un auto_increment
dans le tableau.
auto_increment
dedans. J'aimerais le dernier ajouté.
Réponses:
Oui, il y a un auto_increment là-dedans
Si vous voulez la dernière de toutes les lignes du tableau, alors c'est enfin le moment où se MAX(id)
trouve la bonne réponse! En quelque sorte:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
est indexé.
Gardez à l'esprit que les tables des bases de données relationnelles ne sont que des ensembles de lignes. Et les ensembles en mathématiques sont des collections non ordonnées. Il n'y a ni première ni dernière ligne; pas de ligne précédente ni de ligne suivante.
Vous devrez d'abord trier votre ensemble de lignes non ordonnées par un champ, puis vous serez libre de l'itérer dans l'ensemble de résultats dans l'ordre que vous avez défini.
Puisque vous avez un champ à incrémentation automatique, je suppose que vous voulez que ce soit le champ de tri. Dans ce cas, vous souhaiterez peut-être effectuer les opérations suivantes:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Voyez comment nous trions d'abord l'ensemble des lignes non ordonnées par your_auto_increment_field
(ou ce que vous avez appelé) dans l'ordre décroissant. Ensuite, nous limitons le jeu de résultats à la première ligne avec LIMIT 1
.
Vous pouvez combiner deux requêtes suggérées par @spacepille en une seule requête qui ressemble à ceci:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Cela devrait fonctionner très vite, mais sur les tables INNODB, c'est une fraction de milliseconde plus lente que ORDER + LIMIT.
answered Jun 14 at 9:41
c'est environ 1 an et 6 mois plus tôt :)
sur les tables avec de nombreuses lignes, deux requêtes sont probablement plus rapides ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Faites-le simplement utiliser: PDO::lastInsertId
Presque chaque table de base de données, il y a une colonne auto_increment (généralement id)
Si vous voulez la dernière de toutes les lignes du tableau,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
OU
Vous pouvez combiner deux requêtes en une seule requête qui ressemble à ceci:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
Beaucoup de réponses ici disent la même chose (ordre par incrémentation automatique), ce qui est OK, à condition que vous ayez une colonne auto-incrémentée indexée.
Par ailleurs, si vous avez un tel champ et qu'il s'agit de la clé primaire, il n'y a aucune pénalité de performance pour l'utilisation de order by
versus select max(id)
. La clé primaire est la façon dont les données sont classées dans les fichiers de la base de données (pour InnoDB au moins), et le SGBDR sait où ces données se terminent, et il peut être optimisé order by id + limit 1
pour être le même que pour atteindre lemax(id)
Désormais, la route la moins fréquentée est celle où vous n'avez pas de clé primaire auto-incrémentée. Peut-être que la clé primaire est une clé naturelle, qui est un composite de 3 champs ... Cependant, tout n'est pas perdu. À partir d'un langage de programmation, vous pouvez d'abord obtenir le nombre de lignes avec
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
puis utilisez le nombre obtenu dans la LIMIT
clause
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Malheureusement, MySQL n'autorisera pas de sous-requête ou de variable utilisateur dans la LIMIT
clause
SELECT * FROM adds where id=(select max(id) from adds);
Cette requête permet de récupérer le dernier enregistrement de votre table.