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.* |
Пишу:
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
нужно что бы команда групировала строчки по id_article (что бы не повторялись статьи с одним id_article прив выводе), и выводила последнюю по числу. Сейчас команда глючит! Групировка работает, выводит только одну статью, но дату берет не последнюю а какую взбредет.
Имеется таблица:
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 написал(а):
попробуй так:
если я верно понял задачу, это сработает.
сначала сортируем всё таблицу по убыванию даты, потом группируем по id_article, при этом он берёт первую попавшуюся строку, а поскольку мы их уже до этого отсортировали, то дата будет максимальная
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) |
попробуй так:
если я верно понял задачу, это сработает. сначала сортируем всё таблицу по убыванию даты, потом группируем по 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