Проблем:
Искате да ограничите броя на редовете в набор от резултати в MySQL.
Пример:
Нашата база данни има таблица с име student
с данни в колоните id
, first_name
, last_name
и age
.
id | first_name | фамилно_име | възраст |
---|---|---|---|
1 | Стивън | Уотсън | 25 |
2 | Лиза | Андерсън | 19 |
3 | Алиса | Милър | 19 |
4 | Мери | Кафяв | 25 |
5 | Луси | Уотсън | 25 |
6 | Майкъл | Джаксън | 22 |
Нека изберем пълните имена и възрастта на учениците, но да ограничим връщаните редове до три.
Решение:
SELECT first_name, last_name, age FROM student LIMIT 3;
Ето резултата от заявката:
id | first_name | фамилно_име | възраст |
---|---|---|---|
1 | Стивън | Уотсън | 25 |
2 | Лиза | Андерсън | 19 |
3 | Алиса | Милър | 19 |
Дискусия:
Клаузата LIMIT ограничава броя на редовете в набора от резултати. Използва се в оператора SELECT, обикновено в края на оператора. (Дори ORDER BY трябва да се посочи преди LIMIT.)
Единственият задължителен аргумент е броят на редовете за показване. В нашия пример LIMIT 3 създаде набор от резултати, съдържащ три реда. Освен ако не посочите друго с аргумента OFFSET, тази функция винаги ще връща първия n редове, които отговарят на изискванията за заявка.
Незадължителният аргумент OFFSET на LIMIT се поставя преди аргумента, указващ броя на върнатите редове. Показва позицията на първия ред, върната от LIMIT (т.е. „0“ е първият ред, 1 е вторият ред и т.н.). Отместването и броят на редовете са разделени със запетая.
Заявката връща същите записи като предишната заявка, тъй като отместването е нула. (Нулата е стойността на отместване по подразбиране.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
В тези заявки редовете с резултати са неподредени. Ако искате да изберете три реда от сортиран набор от резултати, използвайте ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Тук първо подреждаме редовете по възраст (надолу), след това по фамилия, след това по собствено име. Използваме стойността на отместване, за да започнем от втория върнат ред и ограничаваме резултатите до три реда:
first_name | фамилно_име | възраст |
---|---|---|
Луси | Уотсън | 25 |
Стивън | Уотсън | 25 |
Майкъл | Джаксън | 22 |
Тази заявка първо сортира редовете според колоната за възрастта в низходящ ред. След това сортира по last_name
и first_name
във възходящ ред. Ако погледнете таблицата, ще видите, че най-възрастните ученици (Стивън, Луси, Мери) са на 25 години. Мария обаче е пропусната, защото тя е първият ред и отместването е 1 (т.е. започваме с втория ред). Луси вече е първа, защото първото й име идва преди Стивън. (Стивън и Луси имат едно и също фамилно име, така че реда им се определя от собственото име.) Майкъл е на 22, което го прави следващият най-възрастен ученик и последният от трите върнати реда.