我已經構建了一個新聞網站: - 文章顯示在首頁按日期排序。最新的一個。 - 新聞與「id」,「title」,「text」等字段在「新聞」表中。 - 所有文章都標有1-5相關標籤。 - 標籤位於表格「標籤」中,字段爲「ID」,「標籤」,「物品」等一些標籤。 - 「tags」字段「article」適合「news」字段「id」。最好的數據庫(MySQL)結構:包含有利標籤的文章
現在我想讓用戶有機會給他的「偏好標籤列表」添加標籤。那麼用戶應該只能看到包含一個有利標籤的新聞文章。
假設用戶Bob有利於標籤「barack obama」,「nba」,「new Jersey」和「dogs」。他只能看到包含這四個標籤中至少一個的文章。
我該如何編寫一個PHP/MySQL腳本來實現這個功能?我認爲我的數據庫結構不適合這個目的,是嗎?我必須做這樣的數據庫查詢:
「SELECT * FROM news WHERE id IN(SELECT article FROM tags WHERE tag IN('barack obama','nba','new jersey','dogs')) 「
該查詢會運行很長時間,不是嗎?必須有一個比我的更合適的數據庫結構。你有這個問題的想法嗎?我需要哪種數據庫結構,然後我必須使用哪些查詢?
我希望你能幫助我。提前致謝!
非常感謝您爲這個快速而好的答案。我有最後一個問題:我應該在哪些字段上設置索引?我選擇了「新聞」中的「id」作爲主要參數,將「tag」作爲主要參數,將「tag」選作「tag」中的唯一參數,將tag_id,news_id作爲主參數,將「news_id」作爲「tag_map」最後,「user_id,tag_id」作爲主要參數,「favorite_tags」中的「tag_id」。它是否正確? – caw 2009-05-23 09:04:55
粗略的看起來似乎是正確的,但是,通過填充表格並進行「EXPLAIN SELECT」等操作來進行雙重檢查。 – 2009-05-23 14:43:20