【发布时间】:2016-03-04 18:42:23
【问题描述】:
有没有办法按顺序返回结果?
示例:对quiz 表运行以下查询:
select q.category_id, q.quiz_id, concat('Quiz ',q.name) name
from quiz q
where q.category_id = 11
order by q.category_id ASC
limit 2
offset 2;
表quiz(结构):
+-------------+---------+-------+
| category_id | quiz_id | name |
+-------------+---------+-------+
| 10 | 10 | math |
| 11 | 10 | sport | => Quiz Sport 1
| 11 | 11 | sport | => Quiz Sport 2
| 12 | 10 | Geo. |
| 11 | 15 | sport | => Quiz Sport 3
| 11 | 12 | sport | => Quiz Sport 4
| 10 | 17 | math |
| 11 | 20 | sport | => Quiz Sport 5
| 11 | 22 | sport | => Quiz Sport 6
| 10 | 19 | math |
+-------------+---------+-------+
返回:
+-------------+---------+------------+
| category_id | quiz_id | name |
+-------------+---------+------------+
| 11 | 15 | Quiz sport |
| 11 | 12 | Quiz sport |
+-------------+---------+------------+
http://sqlfiddle.com/#!9/110752/2
有没有办法以测验编号顺序返回结果,如下所示:
+-------------+---------+--------------+
| category_id | quiz_id | name |
+-------------+---------+--------------+
| 11 | 15 | Quiz sport 3 |
| 11 | 12 | Quiz sport 4 |
+-------------+---------+--------------+
【问题讨论】:
-
您需要有另一个字段
order by才能确定正确的顺序。 Sql 是无序存储的——因此除非您可以按其他字段排序,否则您将无法保证结果。 -
这在 MySql 以外的任何东西中都会很多容易,因为由于某种原因 MySql 没有窗口函数,即使它们已经成为 ansi 标准的一部分超过10年。使用窗口函数,这是一个简单的
row_number()调用,Postgresql、Oracle、Sql Server、DB2、sybase 以及我能想到的任何其他东西都支持它......但不是 mysql。 -
quiz表上没有主键?