2012-11-18 194 views
2

引擎,所以,我在PHP和數據庫的新,我這裏有一個問題:搜索按標籤

我有一個表叫news和其列之一是tags。此列包含1個或多個由空格分隔的標記,如economics politics sports。並且我有一個頁面將接收一個或多個標記作爲單個參數,並且必須返回至少包含一個此標記的所有行。

我可能爆炸的標籤,並根據需要做盡可能多的數據庫訪問,但我敢肯定,這不是做= P

LIKEIN將無法​​工作或者是因爲paramater可以包含更多的方式以任何順序超過1個標籤。

任何幫助?

回答

3

這不是如何構造。

有一個叫做news的表,一個叫tags,一個叫tagsToNews。

在tagsToNews中只記錄新聞條目ID和標籤ID,然後進行連接以獲取所需內容。這也意味着標籤可以重新命名而不會破壞一切!

+0

嗯,這似乎是一個解決方案,謝謝=)。只是另一個問題: 我有一個頁面來插入新聞。有沒有辦法將其插入並將其映射到相同查詢中的標籤?更多:如果標籤不存在,創建標籤? –

+1

不在一個查詢中,但您始終可以對其使用INSERT TRIGGER。 –

+0

大多數人在兩次查詢(或者很多次)中都這樣做,但使用觸發器更加健壯。 –

2

最簡單的解決

使用FULLTEXT索引轉換表中,以MyISAM表和索引的tags。從那裏,使用MATCH()函數提取一個匹配值針對查詢字符串的行(其可包含多個字)

更多適應性溶液

刪除該表和與每行一個標籤重新創建它。您將以這種方式有效地實現FULLTEXT數組,因爲它就是這樣。如果您計劃將數據爆炸,請避免將數據存儲在長字符串中 - 通常,存儲原子部分通常效率更高,因爲您不必依賴飢餓的LIKE運算符。

+0

感謝的人,似乎會解決=) –