2017-07-03 74 views
0

我在写一个查询,但我只想搜索表中的前10条记录。我知道在选择限制通常限制记录,但它不适用于此实例。 如在mysql中我该如何只搜索前10条记录

SELECT * FROM `logon` WHERE `username`='superman' ORDER BY `user_id` LIMIT 10 

上面一行永远不会起作用,因为查询只返回一个。

我只想搜索前10条记录,而限制在这种情况下不起作用。

那么如何限制我的搜索到前10条记录呢?

+0

使用'subquery'。 –

+1

你如何定义“第一”? –

+0

那么前10条记录。假设有100条记录,我只想搜索前10条记录。我想如果你的意思是命令,那将是前10个用户ID。我想我可以使用ORDER By。 –

回答

3
SELECT * FROM 
(SELECT * FROM `logon` ORDER BY `user_id` LIMIT 10) as temp 
WHERE temp.`username`='superman'; 
+0

虽然正确的每个OP,但有简单的'选择*从哪里条件顺序排序限制col'会比这更快,如果Op有过滤器列上的权利指数 – Rahul

0

使用ORDER BY

SELECT * FROM `logon` WHERE `username` = 'superman' ORDER BY user_id LIMIT 10 
+0

RDBMS中的行表示无序集 - 所以没有ORDER BY的LIMIT是毫无意义的。 – Strawberry

+0

不喜欢最接近的匹配。我想要完全匹配,但我只想搜索表中的前10条记录,因为用户名无论如何都是唯一的。 –

+0

是的,你是对的,我会编辑它。 –

0

你可以简单地写一个子查询返回的“第一” 10条记录,把一个where子句对结果集。

+0

类似于: 选择* from(select * from table order by column limit 10)t其中t.col2 = $ value – money

+0

可以。去看看它是否能完成这项工作 –

+0

尽管你给了我正确的答案,但我必须把它交给克劳尔,因为他给出了更完整的答案。无论如何感谢 –

0
SELECT * 
FROM `logon` 
WHERE `username`='superman' 
and user_id in (select user_id from logon order by user_id limit 10) 

(我没有试过,但我认为是这样做的最快方法)

+0

每OP这是正确的答案,即使我会做同样的事情,但这样做是毫无意义的... – Rahul

+0

这看起来像最新的解决方案,但它给错误#1235 - 此版本的MySQL doesn' t仍支持'限制和IN /所有/任何/某些子查询' –

0

不正确的做法...但可以做.. 。

SELECT * FROM logon WHERE username = '超人' AND srno介于1和10;