我有一个mysql表。它在id上有自动增量。但我经常删除行,所以数字到处都是。我需要输出最后n行,但由于删除,使用自动增量id列的最大值的常用方法不能正常工作...
1 - 他们是另一种获得最低50的方式吗?
2 - 他们是按实际行号获取行的方法吗?所以,如果我有4行标记为1,2,3,4删除第2行,那么它将变为1,2,3而不是1,3,4?
答案 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 - 你必须自己管理你的主键,这有点冒险......