SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.03.2009 18:15:54

nick_core
Участник
Зарегистрирован: 25.03.2009
Сообщений: 4

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

Всем привет!
Я новичок в составлении sql-запросов. и у меня не получается сделать следующее.

Дана таблица foo с полями id, автор, сообщение, время:
CREATE TABLE `foo` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `author` varchar(45) NOT NULL,
    `message` text NOT NULL,
    `timestamp` int(11) unsigned NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Мне нужно написать запрос, который выведет два последних опубликованных сообщения (а так же его автора и время публикации), причём сообщения должны быть от разных авторов.

Спасибо.

Неактивен

 

#2 25.03.2009 18:49:30

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: не могу составить запрос

Что-то типа?:

SELECT * FROM foo GROUP BY author ORDER BY timestamp DESC LIMIT 2;


Хорошо бы:
INDEX на `author` и `timestamp`

Неактивен

 

#3 25.03.2009 19:02:09

nick_core
Участник
Зарегистрирован: 25.03.2009
Сообщений: 4

Re: не могу составить запрос

vaspet написал:

Что-то типа?:
SELECT * FROM foo GROUP BY author ORDER BY TIMESTAMP DESC LIMIT 2;

такой запрос не дает последнюю добавленную запись, если предпоследняя была от того же автора

Неактивен

 

#4 25.03.2009 19:05:04

nick_core
Участник
Зарегистрирован: 25.03.2009
Сообщений: 4

Re: не могу составить запрос

такой запрос вроде как подходит

SELECT author, message, timestamp FROM foo
WHERE author !=(SELECT author FROM foo ORDER BY id DESC LIMIT 0,1) OR id=(SELECT id FROM foo ORDER BY id DESC LIMIT 0,1)
ORDER BY id DESC LIMIT 0,2;


Но.... наверняка есть более подходящий способ

Неактивен

 

#5 26.03.2009 01:16:49

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: не могу составить запрос

Видимо, id возрастает также, как и TIMESTAMP (другими словами, сортировка по id даст тот же порядок записей, как и сортировка по TIMESTAMP).
Тогда (если я ничего напутал) можно так:

SELECT *.f
FROM foo AS f
JOIN (SELECT MAX(id) AS id FROM foo GROUP BY author) AS t USING (id)
ORDER BY f.id DESC
LIMIT 2;

Неактивен

 

#6 26.03.2009 11:32:17

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: не могу составить запрос

nick_core написал:

vaspet написал:

Что-то типа?:
SELECT * FROM foo GROUP BY author ORDER BY TIMESTAMP DESC LIMIT 2;

такой запрос не дает последнюю добавленную запись, если предпоследняя была от того же автора

Даст. Тут проблема в другом:
Запрос неверный, потому-что сначала происходит группировка, а потом сортировка.

Вот другое решение (мне кажется более "аккуратное"):

SELECT T.* FROM
(SELECT * FROM foo ORDER BY id DESC) AS T
GROUP BY T.author LIMIT 2;

Отредактированно vaspet (26.03.2009 11:35:40)

Неактивен

 

#7 26.03.2009 14:09:21

nick_core
Участник
Зарегистрирован: 25.03.2009
Сообщений: 4

Re: не могу составить запрос

Спасибо vaspet, LazY!
Очень помогли ваши посты.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson