Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Группировка в многотабличном запросе

Сообщения:  [1-10]   [11-19] 

 
 автор: Trianon   (07.09.2007 в 14:03)   письмо автору
 
   для: 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 формат даты влиять не будет.

   
 
 автор: oradev   (07.09.2007 в 13:49)   письмо автору
 
   для: 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


?

   
 
 автор: Trianon   (07.09.2007 в 13:29)   письмо автору
 
   для: oradev   (07.09.2007 в 13:12)
 

Вас не затруднит честно рассказать, что Вы понимаете под термином "магия данных"?

Магия, насколько мне известно - общее обозначение нематериальных/нетехнологических методик взаимодействия человека с окружающим миром.

В моем запросе ничего нетехнологического нету. Всё идет через соответствующим образом материализованные протоколы.

   
 
 автор: oradev   (07.09.2007 в 13:12)   письмо автору
 
   для: Trianon   (05.09.2007 в 16:08)
 

Trianon, только сейчас вспомнил об этом топике. Мне реализацию в подробностях не нужно., ибо решение схожее с моим. Относительно первого насчет соединения дат, там но коммент
Касаемо вот этого:

SELECT news.news_id nid,  MAX(comments.comment_id) mcid 
......

судя по логике так оно конечно, но в принципе опять магия данных.
Хотя судя по топика афтора ему этого хватит переварить:)

   
 
 автор: Trianon   (05.09.2007 в 16:08)   письмо автору
 
   для: 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 в 13:40)   письмо автору
 
   для: 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 он проходит. Ну этоя к вопросу когда наконец-то Мускул начнет поддержку аналитических функций.

   
 
 автор: oradev   (05.09.2007 в 12:57)   письмо автору
 
   для: Trianon   (05.09.2007 в 12:51)
 

объясните мне сокральный смысл вот этого:

 SELECT news.news_id nid,  MAX(comments.comment_id) mcid


Я правильно понял, этот запрос призван выводить то что хочет афтор ?

   
 
 автор: Trianon   (05.09.2007 в 12:51)   письмо автору
 
   для: oradev   (05.09.2007 в 12:48)
 

Что Вы имеете в виду?
Я, ей-богу, не понял, где плохо и в чем?

   
 
 автор: oradev   (05.09.2007 в 12:48)   письмо автору
 
   для: Trianon   (05.09.2007 в 12:17)
 

--> Не нравится то, что выборка идет не по ключевому столбцу.

Trianon, само собой, это чистая магия данных:


ON sel1.mdp = c.comment_datepost  


А вот мне тем более не нравится! Это та же магия данных !


sel1.mcid = c11.comment_id

   
 
 автор: Trianon   (05.09.2007 в 12:17)   письмо автору
 
   для: 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.

   

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования