2013-09-29 65 views
0

我有兩張表:一張表包含由成員提交的詩。另一個是會員的桌子。兩個表都包含成員的ID(MID和SubMID)。我想顯示已經更新的最後15首詩。但是,我只想爲任何作者顯示一項作品。mySQL加入表沒有重複

這工作,但它如果作者更新了幾個作品,然後它們會顯示很多次:

SELECT * FROM submits, members 
WHERE submits.SubMID = members.MID AND submits.sub_approved = 'T' 
ORDER BY submits.sub_Last_Update DESC LIMIT 15 

你可以看到,查詢這裏的在右邊的滾動字幕的結果: http://www.Prose-n-Poetry.com

問題是,一位作者可以通過更新一些詩來接管選框。

回答

1
SELECT * 
FROM members m 
JOIN (SELECT s.* 
     FROM submits s 
     JOIN (SELECT SubMID, MAX(sub_Last_Update) lastUD 
      FROM submits 
      WHERE approved = 'T' 
      GROUP BY SubMID) l 
     ON s.SubMID = l.SubMID AND s.sub_Last_Update = l.lastUD) s 
ON m.MID = s.SubMID 
ORDER BY s.sub_Last_Update DESC 
LIMIT 15 
+0

這給了我代碼給了我錯誤。什麼是lastUD?我不明白單個字母「s」,「m」,「l」 – user2827532

+0

單個字母是表名稱的別名。它們在每個表名後面聲明。然後可以在整個查詢中使用該字母而不是整個表名。 'LastUD'本身是MAX(sub_Last_Update)函數的別名:它比使用參數重複函數更容易輸入。 –

+0

謝謝,修復了它。發生錯誤的原因是沒有「批准」字段,我需要將其更正爲「sub_approved」 – user2827532

0

編輯:正如@Barmar所評論的,這不會給出每個用戶最近提交的列表。會員

$query = " 
SELECT 
* 

FROM 
submits, members 

WHERE 
submits.SubMID = members.MID 

AND 
submits.sub_approved = 'T' 

GROUP BY 
submits.SubMID 

ORDER BY 
submits.sub_Last_Update DESC 

LIMIT 15 
"; 
+1

由於GROUP BY的ORDER BY之前完成

嘗試分組,這將讓每人一份意見書,但不一定是最新的一個。 – Barmar

+0

這並沒有給出最近15次更新。我通過使用submits.date而不是submits.sub_Last_Update來更改代碼,以顯示最近15個新詩,而不是最後15個已更改(更新)的新詩。 我試過使用DISTINCT來限制它到一個作者沒有運氣 – user2827532