2010-09-10 81 views
3

我正在創建一個需要彈塞系統的系統。例如,有權對博客文章的網址「博客標題:這裏」將是:如何「un-slug」標題slu 012

YYYY/MM/DD /對,博客標題,這裏

我已經系統很好建立,如果您的網址匹配多個條目,則會顯示所有匹配條目的摘要,並且如果它只匹配一個條目,則會顯示完整條目等等。我遇到的唯一麻煩就是標題的「不插電」。目前,我只取第一個字到:我的SQL查詢結尾是這樣的:

'AND subject LIKE '.$this->db->escape(substr($title,0,strpos($title,'-')).'%') 

麻煩的是,如果貼在同一天兩個職位有相同的單詞開始,單入口永遠無法匹配。此外,如果一篇文章以「A」開頭,而同一天發佈的另一篇文章以字母A開頭,那麼以前的文章就不能單獨進行匹配。

我最初的想法是嘗試匹配段塞每字以LIKE %word%,雖然這是更好的似乎hackish的,仍然是不完美的(「A毛坯:麻煩!」和「A麻煩蛞蝓「會衝突)。有沒有一個優雅的解決這個問題?

+1

我一定錯過了一些東西,但你爲什麼不只是在做'AND subject ='。 $ this-> db-> escape($ title)。''?爲什麼你需要採取第一個詞,甚至在那裏做一個喜歡? – Fanis 2010-09-10 21:45:09

+1

看看它是如何做到的 - 是否有任何說法反對使用唯一ID作爲URL的一部分? – Tomalak 2010-09-10 21:46:43

+0

@Fanis:因爲擊倒標題將使它不再符合主題。 @Tomalak:我在迴避,因爲我在綜合搜索和閱讀 – Mala 2010-09-10 22:07:46

回答

6

爲什麼不在表格中創建一個「slug」字段並匹配呢?將slug存儲在那裏,就像它在url中顯示的一樣,然後進行完全匹配。應該解決你的問題。同樣,當在數據庫中輸入slug時,檢查是否存在類似的slug,如果存在,則在末尾添加一個數字。比如'my-post','my-post-1'。

所以這將涉及插入時的一點計算,但應解決您的確切匹配問題。

+0

這似乎是最好的方法。謝謝! – Mala 2010-09-10 22:08:16