Отображать только лучший результат из выбора один-ко-многим - PullRequest
1 голос
/ 22 июля 2011

Мне трудно понять, как справиться с тем, о чем я думал в SQL.У меня есть закладки и комментарии, которые пользователи опубликовали о них.Я использую одну таблицу для всех комментариев.Таким образом, между закладками и комментариями существует отношение один ко многим.

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

Тамдва типа комментариев.Предлагаемые названия для закладки и общие комментарии.Предлагаемые заголовки имеют как заголовок, так и описание, в то время как общие комментарии имеют только описание.Существует также система рейтинга для предлагаемых заголовков, так что домашняя страница может выбрать заголовок с самым высоким рейтингом для каждой закладки для отображения.

Итак, основные вещи, которые нужно прояснить.Есть таблица закладок с BID и URL, а также таблица комментариев с CID, заголовком, комментарием и рейтингом.BooksNComms - это связующая таблица между ними.

    SELECT comments.title, comments.comment
      FROM comments
INNER JOIN booksncomms ON comments.cid=booksncomms.cid
     WHERE booksncomms.bid=1
       AND comments.title is not null
  ORDER BY comments.rating
     LIMIT 0, 1;

Вышеприведенное работает для получения наилучшего заголовка и описания (комментария) для определенного BID.То, что я хочу сделать, это заставить вышеупомянутую работу, скажем, для 10 новейших закладок.

    SELECT bookmarks.url, comments.title, comments.`comment`, comments.rating
      FROM bookmarks
INNER JOIN booksncomms 
        ON bookmarks.bid=booksncomms.bid
INNER JOIN comments 
        ON comments.cid=booksncomms.cid
      JOIN (
            SELECT bookmarks.bid 
              FROM bookmarks 
          ORDER BY bookmarks.datecreated DESC 
             LIMIT 1
        )
        AS a 
        ON a.bid=bookmarks.bid
     WHERE comments.title IS NOT NULL
  ORDER BY bookmarks.url;

Выше приведены все названия для 10 новейших закладок.

Есть ли способЯ могу выбрать только заголовок с самым высоким рейтингом для каждой из 10 новейших закладок?

Ответы [ 2 ]

1 голос
/ 10 мая 2013

(собственное решение ОП, оторвано от вопроса)

@ Лефтерис Асланоглу говорит:

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

    SELECT bookmarks.url, comments.title, comments.comment, comments.rating
      FROM bookmarks
INNER JOIN booksncomms ON bookmarks.bid=booksncomms.bid
INNER JOIN comments ON comments.cid=booksncomms.cid
      JOIN (
           SELECT bookmarks.bid 
             FROM bookmarks 
         ORDER BY bookmarks.datecreated DESC 
            LIMIT 10
      ) AS a ON a.bid=bookmarks.bid
      JOIN (
          SELECT comments.cid, MAX(comments.rating) 
              AS maxrating
            FROM comments
      INNER JOIN booksncomms ON comments.cid=booksncomms.cid
        GROUP BY booksncomms.bid
      ) AS b ON b.cid=comments.cid
     WHERE comments.title IS NOT NULL
  ORDER BY bookmarks.datecreated DESC;
0 голосов
/ 22 июля 2011

Попробуйте

    SELECT bookmarks.url, comments.title, comments.`comment`, MAX(comments.rating) rating
      FROM bookmarks
INNER JOIN booksncomms 
        ON bookmarks.bid = booksncomms.bid
INNER JOIN comments 
        ON comments.cid = booksncomms.cid
     WHERE comments.title IS NOT NULL
  ORDER BY bookmarks.datecreated DESC, bookmarks.url
     LIMIT 10
...