|
|
|
|
|
для: oradev
(07.09.2007 в 13:49)
| | ну уж нет. Играть мы будем по местным правилам.
comment_id comment_news_id comment_datepost
1 5 2007-01-11 15:25:07
3 5 2007-01-14 23:48:25
2 5 2007-01-13 08:12:49
|
Впрочем, на ситуацию с comment_id формат даты влиять не будет. | |
|
|
|
|
|
|
|
для: Trianon
(07.09.2007 в 13:29)
| | comments
comment_id comment_news_id comment_datepost
1 5 14.01.2007
2 5 13.01.2007
3 5 11.01.2007
? | |
|
|
|
|
|
|
|
для: oradev
(07.09.2007 в 13:12)
| | Вас не затруднит честно рассказать, что Вы понимаете под термином "магия данных"?
Магия, насколько мне известно - общее обозначение нематериальных/нетехнологических методик взаимодействия человека с окружающим миром.
В моем запросе ничего нетехнологического нету. Всё идет через соответствующим образом материализованные протоколы. | |
|
|
|
|
|
|
|
для: Trianon
(05.09.2007 в 16:08)
| | Trianon, только сейчас вспомнил об этом топике. Мне реализацию в подробностях не нужно., ибо решение схожее с моим. Относительно первого насчет соединения дат, там но коммент
Касаемо вот этого:
SELECT news.news_id nid, MAX(comments.comment_id) mcid
......
|
судя по логике так оно конечно, но в принципе опять магия данных.
Хотя судя по топика афтора ему этого хватит переварить:) | |
|
|
|
|
|
|
|
для: oradev
(05.09.2007 в 12:57)
| | >объясните мне сокральный смысл вот этого:
>
> SELECT news.news_id nid, MAX(comments.comment_id) mcid
>
|
>
>Я правильно понял, этот запрос призван выводить то что хочет афтор ?
Сакральный смысл этого проявляется лишь вкупе с GROUP BY nid.
Это получение отношения ключей новостей последним коменариям.
GROUP BY здесь вполне крректный, поскольку ничего, кроме группирующего поля и агрегата над строками я от сервера не прошу.
Автор же хочет получить с новостей не только ключи, но и кучу другой подключевой информации. Отсюда соединение с нужными таблицами на более верхнем уровне. | |
|
|
|
|
|
|
|
для: oradev
(05.09.2007 в 12:57)
| | Кстати Насчет сюрприза, вместо моего бабушкина метода, можно использовать и такой.
Но увы Мускул его поддерживать не будет:
SELECT comm.comm_id, n.news_subject, comm.comment_news_id, comm.c_date,
community.community_alias
FROM news n
JOIN
(SELECT comment_news_id, MAX (comment_datepost) c_date,
MAX (comment_id)KEEP (DENSE_RANK LAST ORDER BY comment_datepost) comm_id
FROM comments
GROUP BY comment_news_id ORDER BY 2) comm ON (n.news_id = comm.comment_news_id)
JOIN community ON (community.community_id = n.news_community)
WHERE n.news_public = 'Y';
|
А на Ораклях версии выше 8.1.2 он проходит. Ну этоя к вопросу когда наконец-то Мускул начнет поддержку аналитических функций. | |
|
|
|
|
|
|
|
для: Trianon
(05.09.2007 в 12:51)
| | объясните мне сокральный смысл вот этого:
SELECT news.news_id nid, MAX(comments.comment_id) mcid
|
Я правильно понял, этот запрос призван выводить то что хочет афтор ? | |
|
|
|
|
|
|
|
для: oradev
(05.09.2007 в 12:48)
| | Что Вы имеете в виду?
Я, ей-богу, не понял, где плохо и в чем? | |
|
|
|
|
|
|
|
для: Trianon
(05.09.2007 в 12:17)
| | --> Не нравится то, что выборка идет не по ключевому столбцу.
Trianon, само собой, это чистая магия данных:
ON sel1.mdp = c.comment_datepost
|
А вот мне тем более не нравится! Это та же магия данных !
sel1.mcid = c11.comment_id
|
| |
|
|
|
|
|
|
|
для: oradev
(05.09.2007 в 10:48)
| | Так... по-моему понял.
Не нравится то, что выборка идет не по ключевому столбцу.
Тогда, в предположении, что comment_id - автоинкрементный первичный ключ, возрастающий параллельно таймштампу, вот такой вариант:
SELECT c.comment_id,c.comment_datepost, n.news_subject, t.community_alias
FROM news as n
JOIN (
SELECT news.news_id AS nid, MAX(comments.comment_id) AS mcid,
FROM news
LEFT JOIN comments ON news.news_id=comments.comment_news_id
WHERE news.news_public='Y'
GROUP BY nid
) AS sel1 ON n.news_id = sel1.nid
JOIN comments as с ON sel1.mcid = c.comment_id
LEFT JOIN community ON n.news_community=community.community_id
ORDER BY mdp DESC
LIMIT 15
|
И повторов не будет всяко. primary key есть primary key. | |
|
|
|
|