Php MySQL选择没有主ID或日期字段的上次插入记录

Php MySQL选择没有主ID或日期字段的上次插入记录,php,mysql,select,Php,Mysql,Select,我有一个MySQL表,其中包含以下字段: Email, Flag1, Flag2 问题: 我有没有办法选择最后100个插入的字段 据我所知,表是通过在表的末尾添加带有简单“insert”的新记录来填充的 我知道如何在PHP+MySQL中做到这一点(非常丑陋的方式:选择所有记录,在PHP循环中为每个记录分配自动递增的ID,然后获取最后100条记录) 使用纯MySQL有更优雅的方法吗?如果没有唯一的方法来识别行(例如id或日期),就无法获取最后插入的记录,因为索引将根据您拥有的主键进行排序(假设在

我有一个MySQL表,其中包含以下字段:

Email, Flag1, Flag2
问题: 我有没有办法选择最后100个插入的字段

据我所知,表是通过在表的末尾添加带有简单“insert”的新记录来填充的

我知道如何在PHP+MySQL中做到这一点(非常丑陋的方式:选择所有记录,在PHP循环中为每个记录分配自动递增的ID,然后获取最后100条记录)


使用纯MySQL有更优雅的方法吗?

如果没有唯一的方法来识别行(例如
id
日期
),就无法获取最后插入的记录,因为索引将根据您拥有的主键进行排序(假设在本例中为
电子邮件
).

这是不可能的,因为如果不设置带有时间戳或自动增量的字段,系统将如何知道最后插入的内容?。所以你有两个简单的选择

  • 创建一个时间戳字段:当您下订单时,只需按timefield desc limit 100从您的Tamble order中选择*

  • 使用autoincrement创建as ID。这样做的好处是,您可以拥有一个主键,并知道如何插入列表的确切顺序,但缺点是,您需要另一个字段时间才能知道何时插入数据。作为时间戳解决方案,您可以通过id desc limit 100从Tamble order中选择*


您可以通过
date
添加
date
字段和顺序
asc
,但是为什么没有主
id
?除非您强制执行顺序,否则表中的行没有顺序。如果没有可以排序的标识属性,就没有“last”的概念。另外,您的php循环将不起作用,因为您无法按它们插入的“时间”对它们进行排序,所以在内部递增ID将不起作用。我不是有意要进行向下投票,事实上我非常肯定我投票了。@Najzero不是针对您的:)我会使用后进先出技术获得最后100条记录吗?这意味着如果我能从表的底部得到最后100条记录?我认为这在php中是可能的。。否?@RinatRUssenov在数据库方面,理论上没有索引是可能的,但是,引擎通常会创建自己的索引,这将不可避免地对其进行排序。嗯。。。如果我将当前时间戳作为默认值添加到表中的时间戳字段,我就不必对现有代码进行更改,对吗?。我想这在将来可能会有帮助。@rinchik没有,但您的旧数据将有类似0000-00-00的值,因此您需要手动编辑它或重新创建所有数据,无论如何,备份您的应用程序和数据库(有副本总是很好的),然后再试一次