Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > [MySQL]выбрать последние N записей


Автор: egik14 17.1.2011, 15:30
Не ругайте заглупый вопрос...я ещё тока начинаю учить PHP. Так вот
Есть база данных в неё внесены числа в виде 
1
2
3
4
5
6
7
Как вывести 5 последних чисел вот в таком виде
3
4
5
6
7

Автор: StachelDraht 17.1.2011, 15:33
скажите хоть какие поля есть в таблице

Автор: egik14 17.1.2011, 15:35
id и поле с этими числами

Добавлено через 1 минуту и 26 секунд
короче мне нужно взять 5 последних строк из таблицы и вывести их в том же порядке как идут в таблице

Автор: bars80080 17.1.2011, 17:05
а то что базы данных в пхп нет, конечно не важно.

зато она есть, к примеру, в mysql
Код

SELECT * FROM `table` ORDER BY `id` DESC LIMIT 5

Автор: egik14 17.1.2011, 17:23
если я использую это 
Код

SELECT * FROM `table` ORDER BY `id` DESC LIMIT 5
 то записи выведуться как
7
6
5
4
3
а мне надо чтоб так и вывелись как в таблице
3
4
5
6
7

Автор: bars80080 17.1.2011, 17:40
Код

SELECT * FROM `table` ORDER BY `id` ASC LIMIT 5

Автор: baldina 17.1.2011, 17:46
Код

SELECT * FROM `table` ORDER BY `id` LIMIT 2,5

Автор: egik14 18.1.2011, 08:36
вот это уже близко 
Код

SELECT * FROM `table` ORDER BY `id` LIMIT 2,5

но я могу не знать количество строк в таблице....а 5 последних всё равно вывести надо))

Автор: topy 18.1.2011, 09:12
Цитата(egik14 @  18.1.2011,  08:36 Найти цитируемый пост)
но я могу не знать количество строк в таблице....а 5 последних всё равно вывести надо)) 

Значит надо сделать предварительный запрос и узнать количество строк в таблице... ммм???

Автор: enoff 18.1.2011, 09:16
http://php.net/array_reverse

Автор: baldina 18.1.2011, 09:50
согласно документации
Цитата

To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last:
Код

SELECT * FROM tbl LIMIT 95,18446744073709551615;



Автор: skyboy 18.1.2011, 11:06
поддержу enoff: получай последние пять записей, как уже в 4-м посте посоветовал bars80080, а потом полученные данные выводи хоть в прямом порядке, хоть в обратном.
возможно, конечно, обойтись только SQL:
Код

SELECT *
FROM 
 (SELECT * FROM `table` ORDER BY `id` DESC LIMIT 5) as `tmp`
ORDER BY `id`

но я считаю некрасивым использование подзапроса только для обращения порядка вывода.

Автор: baldina 18.1.2011, 14:11
Код

select * from tbl where id > (select id from tbl limit 5,1 order by id) order by id;

Автор: egik14 19.1.2011, 05:24
всем спасиба огромное))) сделал запрос в запросе)))

Автор: egik14 20.1.2011, 18:26
ах да)) совсем забыл спросить что означает 
Код

as 'tmp'
 
в запросе 
Код

SELECT *
FROM 
 (SELECT * FROM `table` ORDER BY `id` DESC LIMIT 5) as `tmp`
ORDER BY `id`

Автор: Akina 20.1.2011, 20:35
Цитата(egik14 @  20.1.2011,  19:26 Найти цитируемый пост)
что означает 

Алиас. Временное имя. Если полностью и строго, запрос должен был выглядеть так:
Код

SELECT `tmp`.*
FROM 
(
  SELECT `table`.* 
  FROM `table` 
  ORDER BY `table`.`id` DESC LIMIT 5
) as `tmp`
ORDER BY `tmp`.`id`

В этом случае для любого поля понятно, из какой таблицы или подзапроса её брать.
PS. Кстати, ты ошибся, написав неправильные кавычки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)