【问题标题】:MySQL Select last inserted records without primary ID or date fieldMySQL选择没有主ID或日期字段的最后插入记录
【发布时间】:2012-09-07 18:22:42
【问题描述】:

我有一个包含以下字段的 MySQL 表:

Email, Flag1, Flag2

问题: 有什么方法可以让我进行选择以获取最后 100 个插入的字段?

据我了解,表格是通过在表格末尾添加带有简单“插入”的新记录来填充的。

我知道如何在 PHP+MySQL 中做到这一点(非常丑陋的方式:SELECT ALL RECORDS在 php 循环中分配给每个记录自动递增的 ID,并获取最后 100记录。)

有没有更优雅的方法可以用纯 MySQL 做到这一点?

【问题讨论】:

  • 您可以添加一个date 字段并通过date 订购asc,但是为什么没有主id 呢?
  • 表格中的行没有顺序,除非你强加一个。如果没有一些可以排序的识别属性,就没有“最后一个”的概念。

标签: php mysql select


【解决方案1】:

如果没有唯一的方法来识别行(例如 iddate),则无法获取最后插入的记录,因为您的索引将根据您拥有的任何主键进行排序(假设 @987654323 @ 在这种情况下)。

【讨论】:

  • 这个。再加上你的 php 循环将不起作用,因为你没有办法按它们插入的“时间”对它们进行排序,因此在内部增加 ID 将不起作用。
  • 并不是要投反对票,实际上我很确定我投了赞成票。
  • @Najzero 不是针对你的 :)
  • 我能否使用后进先出技术获得最后 100 条记录?这意味着如果我将从表格底部获得最后 100 条记录?我认为这可能与 php.. 没有?
  • @RinatRUssenov 在数据库方面,理论上没有索引是可能的,但是,引擎通常会创建自己的索引,这将不可避免地对其进行排序。
【解决方案2】:

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

  • 创建一个时间戳字段:当您下订单时,只需创建select * from yourtamble order by timefield desc limit 100

  • 创建一个具有自动增量的 ID。这样做的好处是您可以拥有一个主键并知道插入列表的确切顺序,坏处是您需要另一个字段时间来知道何时插入数据。作为时间戳解决方案,您可以使用select * from yourtamble order by id desc limit 100

【讨论】:

  • 嗯...如果我将时间戳字段添加到表中,并将当前时间戳作为默认值,我就不必更改现有代码对吗?我觉得将来可能会有所帮助。
  • @rinchik 不,但是您的旧数据将具有类似 0000-00-00 的值,因此您需要手动编辑它或重新创建所有数据,无论如何都要备份您的应用程序和数据库(有一份总是好的)并尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
相关资源
最近更新 更多