【问题标题】:mysql row countermysql 行计数器
【发布时间】:2011-02-11 14:58:49
【问题描述】:

我有一个 mysql 表。它在 id 上有自动增量。但我经常删除行,所以数字到处都是。我需要取出最后 n 行,但由于删除,使用自动递增 id 列的最大值的常用方法效果不佳...

1 - 他们是另一种进入后 50 名的方法吗?

2 - 他们是按实际行号获取行的方法吗?所以如果我有 4 行标记为 1,2,3,4 删除第 2 行那么它将变为 1,2,3 而不是 1,3,4?

【问题讨论】:

  • 你签出LIMIT了吗?
  • 您永远不需要以这种方式调整自动递增的 ID
  • 使用自动递增的 id 列的最大值 常见,也不是办法。
  • @kjy112 完全相反,非常糟糕。
  • @Martin - Oracle 中的 Rownum 特定于所选子集,而不是数据库中的行(即 rowid)....如果我在表中有 50 条记录并选择前 10 个 PK ,那么 Oracle rownum 值将是 1-10...如果我选择最后 10 个 PK,那么 Oracle rownum 值将是 1-10...对于完全不同的记录,相同的 rownums。这并不类似于 MySQL 表中的自动增量值(或 Oracle 表中从 SEQUENCE 分配的 PK)。

标签: php mysql


【解决方案1】:
SELECT ... ORDER BY id DESC LIMIT 50

【讨论】:

    【解决方案2】:
    SELECT *
      FROM TABLE
     ORDER BY id DESC
     LIMIT 50
    

    编辑

    选择最后 50 个,但按 id ASC 排序

    SELECT X.*
      FROM ( SELECT *
               FROM TABLE
              ORDER BY id DESC
              LIMIT 50
           ) X
     ORDER BY X.id
    

    【讨论】:

      【解决方案3】:

      1 - 首先获取总行数

      SELECT COUNT(*) AS c FROM ...

      然后使用

      选择 ..... 限制 [开始],[计数]

      2 - 一个想法是使用视图或过程,但这要困难得多,并且可能在没有其他方法可以避免时使用

      【讨论】:

      • 1. ORDER BY DESC 并设置 50 行 LIMIT 50
      【解决方案4】:

      1 - 他们是另一种进入后 50 名的方法吗?

      SELECT * FROM table_name ORDER BY record_id DESC LIMIT 50
      

      2 - 他们是按实际行号获取行的方法吗?所以如果我有 4 行标记为 1,2,3,4 删除第 2 行那么它将变为 1,2,3 而不是 1,3,4?

      SELECT * FROM table_name
      

      【讨论】:

        【解决方案5】:

        1 - 是的,但它是丑陋的 afaik,你做一个

        SELECT whateveryouwant FROM table ORDER BY yourprimarykey DESC LIMIT 50
        

        您将行提取到数组中并在 php 中反转数组:

        $r = mysql_query('SELECT * FROM table ORDER BY primarykey DESC LIMIT 50');
        $set = array();
        while($row = mysql_fetch_assoc($r)) $set = $row;
        $set = array_reverse($set);
        foreach($set as $row) {
          // display row ...
        }
        

        2 - 你必须自己管理你的主键,这有点冒险......

        【讨论】:

        • PHP中不用做反转,用SQL做
        • 其实这里没有什么丑的。如果您要直接从 while 循环中打印出数据库内容,那将很难看。但是如果你使用模板(你应该这样做),无论如何你都会得到那个数组
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        相关资源
        最近更新 更多