Официальный сайт студ.городка НГТУ
Программирование и БД » [mysql] MIN и LIMIT в "одном" запросе 

#1  15.04.09 12:54

[mysql] MIN и LIMIT в "одном" запросе

Тестовая `posts` таблица:

Код: mysql:

CREATE TABLE `posts` (
  `id` INT(10) NOT NULL AUTO_INCREMENT,
  `topic_id` INT(10) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  AUTO_INCREMENT=1 ;


Вида
id topic_id
1    1
2    1
3    1
4    1
5    2
6    1
7    2
8    2
9    2
10   2

Необходимо выбрать допустим 3 последних записи с определёным topic_id (например 1) и найти минимальный id из этих трёх.

Я тут попытался сначала

Код: mysql:

SELECT MIN(id) FROM posts WHERE topic_id=1 ORDER BY id DESC LIMIT 3

но мускул всё делает в порядке как написано в запросе, то есть сначала выбирает все записи у которых topic_id=1, сортирует по айди и только потом отбрасывает всё кроме 3х записей, поэтому MIN(id) = 1, а нада 3.

Потом вспомнил про подзапросы

Код: mysql:

SELECT MIN(id) FROM posts WHERE id IN (SELECT id FROM posts WHERE topic_id=1 ORDER BY id DESC LIMIT 3)


И получил ошибку от мускула

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Но таки получилось уйти от этой ошибки

Код: mysql:

SELECT MIN(id) FROM posts WHERE id IN (SELECT id FROM (SELECT id FROM posts WHERE topic_id=1 ORDER BY id DESC LIMIT 3) Alias)


MIN(id) = 3

Но это же ахтунг какойто. Нет ли способа поэлегантней что ли?

Исправлено iDrum (15.04.09 12:54)

Offline

#2  15.04.09 14:14

Re: [mysql] MIN и LIMIT в "одном" запросе

ты лишний селект делаешь

Код: sql:

SELECT MIN(id) FROM (SELECT id FROM posts WHERE topic_id=1 ORDER BY id DESC LIMIT 3) t1


P.S.
а элегантнее - это как понимать? короче? так-то для таких вещей делают вьюхи и работают с вьюхами, как с таблицами

Исправлено Jaguar (15.04.09 14:19)

Offline

#3  15.04.09 14:37

Re: [mysql] MIN и LIMIT в "одном" запросе

вьюхи?

Offline

#4  15.04.09 17:29

Re: [mysql] MIN и LIMIT в "одном" запросе

iDrum, читай на тему VIEW, Ягуар прав.

Offline

Программирование и БД » [mysql] MIN и LIMIT в "одном" запросе 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.153 сек.
Выполнено 14 запросов.