所以我有这张桌子
id | gender | name
1 | f | kate
2 | m | john
3 | f | monica
4 | f | zoey
5 | m | perry
6 | f | mary
7 | m | paul
8 | f | carol
9 | m | mark
10 | m | ross
11 | f | emily
12 | m | Jay
13 | m | Mike
如果我做了SELECT id name FROM users WHERE gender = m
我明白了:
id | gender | name
2 | m | john
5 | m | perry
7 | m | paul <<<
9 | m | mark <<<
10 | m | ross <<<
12 | m | Jay
13 | m | Mike
这就是我想要做的:
我要这样做是因为我有一个网站,并且希望在每个页面上显示3个结果(因此,最新的条目将首先显示)。因此,在第1页上,它应该显示
id | gender | name
13 | m | Mike
12 | m | Jay
10 | m | ross
第2页:
id | gender | name
9 | m | mark
7 | m | paul
5 | m | perry
第3页:
id | gender | name
2 | m | john
问题:我使用哪种select语句获得第3页中的类似结果。
SELECT * FROM users
WHERE gender = 'm'
LIMIT 6, 3
ORDER BY DESC
我认为我是对的,但这是行不通的。对我而言,Limit 6
意味着获得第六个结果(在本例中为John)。然后3
从第6个结果中得到第7个和第8个结果。但是,我们没有第七,第八名。因此,我们只能得到第六个结果,也就是约翰。
答案 0 :(得分:1)
OFFSET和LIMIT与ID不相关,而与row_number相关。这是小提琴供您理解。
CREATE TABLE t (`id` int, `gender` varchar(1), `name` varchar(6)) ;
✓
INSERT INTO t (`id`, `gender`, `name`) VALUES (1, 'f', 'kate'), (2, 'm', 'john'), (3, 'f', 'monica'), (4, 'f', 'zoey'), (5, 'm', 'perry'), (6, 'f', 'mary'), (7, 'm', 'paul'), (8, 'f', 'carol'), (9, 'm', 'mark'), (10, 'm', 'ross'), (11, 'f', 'emily'), (12, 'm', 'Jay'), (13, 'm', 'Mike') ;
✓
SELECT * FROM t WHERE gender = 'm' ORDER BY ID DESC
id | gender | name -: | :----- | :---- 13 | m | Mike 12 | m | Jay 10 | m | ross 9 | m | mark 7 | m | paul 5 | m | perry 2 | m | john
SELECT * FROM t WHERE gender = 'm' ORDER BY ID DESC LIMIT 3 OFFSET 3
id | gender | name -: | :----- | :---- 9 | m | mark 7 | m | paul 5 | m | perry
db <>提琴here
用于选择第三页
SELECT * FROM t
WHERE gender = 'm'
ORDER BY ID DESC
LIMIT 3 OFFSET 6