2011-07-22 45 views
1

我無法理解如何處理我在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個最新書籤中的每一個選擇最高評分標題?

+0

無法讀取的SQL。這是一個約定,SQL關鍵字應該用大寫字母來區分它們。 :( – Shef

+0

編輯我的第二個例子,根據您的指示。對不起。 –

+0

更新我的答案,試試看,並讓我知道它是否有效 – Shef

回答

1

(OP自己的解決方案,從問題分離出來)

@LefterisAslanoglou說:

我意識到,我知道答案我張貼短短几分鐘後這裏的問題。幾個小時以來,我一直在竊聽我,但獲取每張書籤具有最高評分標題的表格並將其加入到具有所有最新書籤標題的表格中是一件簡單的事情。

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

謝謝你分開發布我的答案。這個項目......每當我回頭看時,我總是嘲笑我選擇一個單獨的桌子來進行一對多的關係。噢! –

0

嘗試

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