[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: простейшая выборка
error21
Имеется таблица комментариев, следующей структуры:

discription, id_article, cdate

discription - текст
id_article - к какой статье прикреплен (он не раз повторяется в таблице)
cdate - само собой время

Задача: вывести 5 последних комментируемых статей (сортировать по дате комментария)

1 попытка
SELECT * FROM `articlecomments` ORDER BY `cdate` DESC LIMIT 0,5

само собой все хорошо, за исключением того, что если в статье 2 последних комментария, то она два раза выводиться - не порядок

2 попытка
SELECT * FROM `articlecomments` GROUP BY `id_article` ORDER BY `cdate` DESC LIMIT 0,5


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

Подскажите вариант решения данной проблемы, либо свой вариант команды запроса.

С уважением. Илья



Спустя 2 минуты, 37 секунд (2.04.2010 - 14:39) glock18 написал(а):
select min(cdate) as cdate


?

Спустя 2 минуты, 23 секунды (2.04.2010 - 14:41) error21 написал(а):
Цитата (glock18 @ 2.04.2010 - 11:39)
select min(cdate) as cdate


?

вот... уже интересно очень стало. Спасибо за вариант. Я знал что нужно min max копать. столкнулся только с проблемой чтения... Прочел а так и не понял как сделать. Не могли бы Вы подсказать как правильно команду задать.

И так как мне нужно по последней дате искать комменты, то видимо нужно не min а max.... Или я что-то не правильно понял?

Спустя 37 минут, 24 секунды (2.04.2010 - 15:19) Nikitian написал(а):

select id_article from `articlecomments` group by id_article order by `cdate` desc limit 5

Спустя 1 минута, 50 секунд (2.04.2010 - 15:20) glock18 написал(а):
да, самые последние примерно так (верно, с max, а не с min):

select max(`cdate`) as `lastDate`, a.*
from `articleComments` a
group by `id_article`
order by `cdate` desc
limit
0, 5

Спустя 12 дней, 3 минуты, 54 секунды (14.04.2010 - 15:24) error21 написал(а):
Цитата (glock18 @ 2.04.2010 - 12:20)
да, самые последние примерно так (верно, с max, а не с min):

select max(`cdate`) as `lastDate`, a.*
from `articleComments` a
group by `id_article`
order by `cdate` desc
limit
0, 5

Пишу:

SELECT max(`cdate`) as `lastDate`, a.* FROM articlecomments a GROUP BY id_article ORDER BY cdate DESC LIMIT 0,100


Результат вывода прежний. В том же порядке как и без max(`cdate`)

Есть идеи почему?

Спустя 18 часов, 20 минут, 37 секунд (15.04.2010 - 09:45) error21 написал(а):
Для тех кто не понял, еще раз пишу проблему.
Имеется таблица:

id id_article cdate
---------------------------------------------
1 713 2010-04-12
2 724 2010-04-13
3 713 2010-04-17

SELECT max(`cdate`) as `lastDate`, a.* FROM articlecomments a GROUP BY id_article ORDER BY cdate DESC LIMIT 0,100


нужно что бы команда групировала строчки по id_article (что бы не повторялись статьи с одним id_article прив выводе), и выводила последнюю по числу. Сейчас команда глючит! Групировка работает, выводит только одну статью, но дату берет не последнюю а какую взбредет.

Спустя 2 часа, 24 минуты, 53 секунды (15.04.2010 - 12:10) maxims написал(а):
попробуй так:



SELECT r.* FROM (SELECT * FROM articlecomments ORDER BY cdate DESC) r GROUP BY r.id_article LIMIT 0,100



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

Спустя 1 час, 4 минуты, 48 секунд (15.04.2010 - 13:15) error21 написал(а):
Цитата (maxims @ 15.04.2010 - 09:10)
попробуй так:



SELECT r.* FROM (SELECT * FROM articlecomments ORDER BY cdate DESC) r GROUP BY r.id_article  LIMIT 0,100



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

БРАВО!!!!!!!!! Я всегда говорил, что ответ на сложный вопрос, слишком прост что бы его заметить. Я и не видел никогда что можно так запросы составлять, ну что поделать опыта малова то. Теперь буду знать. Спасибо большое за решение проблемы.

P.S. Запросик по DESC в конце второй раз нужно было сортировать иначе вылезали не по порядку последнего.

SELECT r.* FROM (SELECT * FROM articlecomments ORDER BY cdate DESC) r GROUP BY r.id_article ORDER BY cdate DESC  LIMIT 0,100
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.