2009-10-29 219 views
1

我想顯示產品的最近的相關項目。所以說我正在展示一款產品,樣式編號是SG-sfs35s。有沒有辦法選擇任何產品的風格編號與其最接近?MySQL:選擇最接近的匹配?

謝謝。

編輯:回答你的問題。那麼我絕對想保留前兩個字母,因爲這是製造商的代碼,但對於第一次衝刺之後的部分,只要是最接近的任何匹配。所以例如SG-sfs35s將比SG-sht64s更多地匹配SG-shs35s。我希望這是有道理的,每當我做LIKE product_style_number它只拉取完全匹配。

+0

你如何確定最接近?你的算法是什麼? – 2009-10-29 14:22:38

+0

你是什麼意思產品的風格編號?產品代碼的模式? – 2009-10-29 14:23:03

+0

因此,您將使用SG-sfs35s在數據庫中的字段上執行LIKE操作? – Zoidberg 2009-10-29 14:23:21

回答

5

通常沒有簡單的方法來匹配大致相似的產品代碼。

一個更友好的SQL解決方案是創建每個產品映射到所有它是類似產品的新表。

該表可能需要手動維護,或者可以定期執行更復雜的腳本來更新它。

如果你的產品代碼遵循一致的模式(所有的字母都是同類產品相同,只有數變化的),那麼你就應該能夠使用正則表達式匹配類似的項目。有關於此的文檔here...

1

你可能會想做一個存儲過程,因爲我預計這個算法可能不是微不足道的。

例如,你可以在-分裂術語,所以你有兩個部分。你在每個部分上做一個LIKE查詢並用它來做決定。

你可以只循環雖然與「%」替換最後一個字符,直到你得到至少一個結果,在你的存儲過程。

0

聽起來像你需要類似Lucene,但我不知道這是否會爲你的情況矯枉過正。但它肯定能夠進行文本搜索並返回最相似的文件。

如果你需要更多的東西簡單我會嘗試用完整的產品代碼搜索開始,然後如果不行嘗試使用通配符/刪除一些字符,直到返回結果。

0

JD Isaacks。

你的這種情況很容易解決。 這不像你需要使用Google這樣的人工智能。

http://www.w3schools.com/sql/sql_wildcards.asp

看看本手冊的有關通配符W3Schools的與你的SELECT代碼中使用。

但是,您還需要創建一個3列的新表格:LeftCode,RightCodeWildCard

實施例:

上表行:

  1. LeftCode = SG | RightCode = 35s | WildCard = SG-s_s35s
  2. LeftCode = SG | RightCode = 64s |通配符= SG-s_t64s

SQL代碼

如果用戶鍵入該表的ROW1相匹配的代碼:

SELECT * FROM PRODUCTS WHERE CODE LIKE "$WildCard"; 

哪裏$WildCard是包含第3列的PHP變量的新表。

我希望我幫助,甚至4年晚...