mysql行计数器

时间:2011-02-11 14:58:49

标签: php mysql

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

1 - 他们是另一种获得最低50的方式吗?

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

5 个答案:

答案 0 :(得分:5)

SELECT ... ORDER BY id DESC LIMIT 50

答案 1 :(得分:3)

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

答案 2 :(得分:0)

1 - 首先得到总行数,如

SELECT COUNT(*) AS c FROM ...

然后使用

SELECT ..... LIMIT [start],[count]

2 - 一个想法是使用视图或过程,但这更难,并且可以在没有其他方法可以避免这种情况时使用

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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 - 你必须自己管理你的主键,这有点冒险......