我有3個表。在這裏,我張貼它的數據庫圖。MySQL:寫一個複雜的查詢
你可以從這裏下載DB代碼:https://www.dropbox.com/s/lk956afaxv147h0/testS.sql?dl=0
現在,使用這個數據庫,並使用「唯一」的MySQL,我需要做下面的工作。
1)給定一個用戶ID,它應該得到這個用戶已知的所有單詞列表,按照他們學習的順序排序。換句話說,最近學過的單詞將在列表的頂部。
2)您將獲得包含從表中這個特別的字「言」
3)您將瀏覽這份清單,並從表「文章」,它包含最多10返回所有記錄的所有文章的列表「未知詞語。換句話說,如果該文章包含10個以上未出現在用戶詞彙列表中的單詞(從表格「Words_Learned」中提取),則將其從列表中排除。
4)然後,您將轉到步驟1中列表中的下一條記錄。重複相同的過程,除非您跳過從步驟3返回的任何項目或者作爲步驟中過濾過程的一部分排除的項目3.
爲了實現這個過程,我沒了下文
SELECT `words_learned`.`idwords`,
Words.`idArticle`
FROM words_learned
INNER JOIN Words ON Words.idWords = Words_Learned.`idwords`
WHERE words_learned.userId = 1
ORDER BY Words_Learned.`order` DESC
在我的詢問,我已經覆蓋點1和2,但我應該需要,以覆蓋點3和4做什麼?
3可以用一些GROUP BY與後期聚合過濾(HAVING) – Mihai 2014-10-29 11:38:16
@Mihai:感謝您的回覆。你能用代碼發表明確的答案嗎?理解會很有幫助。 – 2014-10-29 11:39:23
請注意,使用諸如COUNT之類的關鍵字和/或諸如ORDER之類的保留字作爲表格/列標識符是災難的祕訣。COUNT是一個特別奇怪的因爲它不包含在MySQL的保留字列表中 - 但只是你嘗試創建一個名爲COUNT的表! – Strawberry 2014-10-29 11:42:21