【发布时间】:2011-02-23 12:04:19
【问题描述】:
有没有办法从数据库示例中获取准确数量的条目。例如,假设您有一个表,其中只有一个 id 和列的总访问次数。假设您想准确抓取 20 个条目并按总访问次数对其进行排序。你会怎么做?我知道如何对整个表进行排序,但希望能够获取前 20 名的总访问量,然后对它们进行排序。谢谢
O,现在我正在使用 sqlite,但我知道将来我也会使用 mysql。谢谢
【问题讨论】:
有没有办法从数据库示例中获取准确数量的条目。例如,假设您有一个表,其中只有一个 id 和列的总访问次数。假设您想准确抓取 20 个条目并按总访问次数对其进行排序。你会怎么做?我知道如何对整个表进行排序,但希望能够获取前 20 名的总访问量,然后对它们进行排序。谢谢
O,现在我正在使用 sqlite,但我知道将来我也会使用 mysql。谢谢
【问题讨论】:
尝试:
SELECT * FROM TableName ORDER BY TotalVisits LIMIT 20
【讨论】:
使用limit获得前20名,
如果您想添加其他排序,请在访问列之后添加它
喜欢:
SELECT * FROM mytable ORDER BY visits DESC
/*here put another order by field like date */
, date
LIMIT 20
【讨论】:
使用 ORDER - LIMIT 子句
SELECT * FROM table ORDER BY field [ASC|DESC] LIMIT 20 OFFSET [offset value]
【讨论】:
您需要使用 LIMIT,但如果您打算根据单独的条件对前 20 名进行重新排序,则需要将整个内容放在子查询中。所以
SELECT * from <table> order by <total visits column> LIMIT 20
会让你进入前 20 名,但是要在该结果中排序,你会做类似的事情
SELECT * from
(SELECT * from <table> ORDER BY <total visits column> LIMIT 20)
ORDER BY <other criteria>
【讨论】:
LIMIT 子句可用于限制 SELECT 语句返回的行数。 LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量,但以下情况除外:
有两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为0(不是1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
要检索从某个偏移量到结果集末尾的所有行,您可以为第二个参数使用一些较大的数字。此语句检索从第 96 行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
使用一个参数,该值指定从结果集开头返回的行数:
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
换句话说,LIMIT row_count 等价于 LIMIT 0, row_count。
All on:http://dev.mysql.com/doc/refman/5.5/en/select.html 对 mysql 的更好解释,但是 sqlite 的工作方式相同:http://www.sqlite.org/lang_select.html
【讨论】: