Помогите написать запрос

Игорёк

Новичок
Помогите написать запрос

В таблицу добавляются записи, у каждой новой записи
поле id больше на единицу, чем у предыдущей добавленной.

Я хочу получить из таблицы последние 5 добавленных
записей, причем в порядке возрастания!

[sql]SELECT * from MyTable ORDER BY id DESC LIMIT 5";[/sql]

Такой запрос возвращает последние 5 записей, но
в порядке убывания:
78
77
76
75
74

Мне же нужно получить их в порядке возрастания.
Но если я делаю так:
[sql]SELECT * from MyTable ORDER BY id ASC LIMIT 5";[/sql]

то мне возвращаются совсем не последние, а первые
1
2
3
4
5

А мне надо, чтобы выдавалось:
74
75
76
77
78

Подскажите, как мне правильно написать запрос. Наверное
это делается как-то просто, но я плохо знаю SQL, а сделать
надо быстро. Заранее благодарен, Игорёк.
 

Popoff

popoff.donetsk.ua
через 2 запроса:
1.
SELECT id from MyTable ORDER BY id DESC LIMIT 5,1";
2.
select * from MyTable where id>=$id order by id asc
:)
 

ForJest

- свежая кровь
Popoff не сосвсем корректный пример - записи могут быть удалены.
3 метода
1. использовать пару
SELECT COUNT(*) cnt FROM table1;
SELECT * FROM table 1 ORDER BY id ASC LIMIT $cnt-5, 5;
что не есть совсем хорошо, так как будут перебраны все записи таблицы в итоге
2.
CREATE TEMPORARY TABLE tmp SELECT * FROM table1 ORDER BY id DESC LIMIT 5 TYPE=HEAP MAX_ROWS=5;
SELECT * FROM tmp ORDER BY id;

3. использовать [m]mysql_data_seek[/m] для того, чтобы получить записи в обратном порядке.
 

ONK

Пассивист PHPСluba
ForJest, пример Popoff, вполне корректен и эффективнее приведённых тобою (ну кроме 3-его варианта) -)
 

ForJest

- свежая кровь
За время между обращениями может быть добавлена еще одна запись.
 

Andrew_P

Guest
Если критичен факт добавления записей при выборке, то пользуйтесь:
PHP:
LOCK TABLES <table_name> WRITE;
// делаем то, что нам нужно
UNLOCK TABLES;
 

ONK

Пассивист PHPСluba
Автор оригинала: ForJest
За время между обращениями может быть добавлена еще одна запись.
С этой точки зрения твой 1 - й пример точно также не безгрешен :) Если это крититчно, то остаётся блокировать таблицу.
 

Falc

Новичок
Если вытаскивать надо действительно 5 записей или небольшое количество, то проще вытащить записи в масив и сделать реверс.
Иначе как сказал ForJest в 3-ем варианте.
 
Сверху