mysql从最后n行中select

我有一个索引(自动增量)和整数值的表。 这张桌子有数百万行。

如何search某个数字是否最有效地出现在表格的最后n行?

从@chaos给出的答案开始,但有一些修改:

  • 如果你使用LIMIT你应该总是使用ORDER BY 。 RDBMS表没有隐式的顺序保证。 您通常可以按照主键的顺序获取行,但不能依赖于此,也不能移植。

  • 如果按降序排列,则不需要事先知道表中的行数。

  • 您必须为派生表提供相关名称 (也称为表别名)。

这是我的版本的查询:

 SELECT `id` FROM ( SELECT `id`, `val` FROM `big_table` ORDER BY `id` DESC LIMIT $n ) AS t WHERE t.`val` = $certain_number; 

像分页一样利用SORT和LIMIT。 如果你想要第ith块的行,使用OFFSET。

 SELECT val FROM big_table where val = someval ORDER BY id DESC LIMIT n; 

对于Nir的回应:sorting操作不一定会受到惩罚,这取决于查询规划器的function。 由于这个用例对分页性能至关重要,因此有一些优化(参见上面的链接)。 在postgres中也是如此,“ORDER BY … LIMIT可以不用sorting” E.7.1。 最后一颗子弹

 explain extended select id from items where val = 48 order by id desc limit 10; +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | 1 | SIMPLE | items | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ 

最后5行在mysql中检索

这个查询工作完美

 SELECT * FROM (SELECT * FROM recharge ORDER BY sno DESC LIMIT 5)sub ORDER BY sno ASC 

要么

 select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc 

可能是一个非常迟的答案,但这是好的,简单的。

 select * from table_name order by id desc limit 5 

这个查询将返回你已经插入到表中的最后5个值(最后5行)

因为这是自动增量,这是我的看法:

 Select * from tbl where certainconditionshere and autoincfield >= (select max(autoincfield) from tbl) - $n 

我知道这可能PDO::lastInsertId ,但尝试使用PDO::lastInsertId 。 我认为它是做你想做的,但是你将不得不重写你的应用程序来使用PDO(这对于攻击来说更安全)