我想顯示產品的最近的相關項目。所以說我正在展示一款產品,樣式編號是SG-sfs35s。有沒有辦法選擇任何產品的風格編號與其最接近?MySQL:選擇最接近的匹配?
謝謝。
編輯:回答你的問題。那麼我絕對想保留前兩個字母,因爲這是製造商的代碼,但對於第一次衝刺之後的部分,只要是最接近的任何匹配。所以例如SG-sfs35s將比SG-sht64s更多地匹配SG-shs35s。我希望這是有道理的,每當我做LIKE product_style_number它只拉取完全匹配。
我想顯示產品的最近的相關項目。所以說我正在展示一款產品,樣式編號是SG-sfs35s。有沒有辦法選擇任何產品的風格編號與其最接近?MySQL:選擇最接近的匹配?
謝謝。
編輯:回答你的問題。那麼我絕對想保留前兩個字母,因爲這是製造商的代碼,但對於第一次衝刺之後的部分,只要是最接近的任何匹配。所以例如SG-sfs35s將比SG-sht64s更多地匹配SG-shs35s。我希望這是有道理的,每當我做LIKE product_style_number它只拉取完全匹配。
通常沒有簡單的方法來匹配大致相似的產品代碼。
一個更友好的SQL解決方案是創建每個產品映射到所有它是類似產品的新表。
該表可能需要手動維護,或者可以定期執行更復雜的腳本來更新它。
如果你的產品代碼遵循一致的模式(所有的字母都是同類產品相同,只有數變化的),那麼你就應該能夠使用正則表達式匹配類似的項目。有關於此的文檔here...
你可能會想做一個存儲過程,因爲我預計這個算法可能不是微不足道的。
例如,你可以在-
分裂術語,所以你有兩個部分。你在每個部分上做一個LIKE
查詢並用它來做決定。
你可以只循環雖然與「%」替換最後一個字符,直到你得到至少一個結果,在你的存儲過程。
聽起來像你需要類似Lucene,但我不知道這是否會爲你的情況矯枉過正。但它肯定能夠進行文本搜索並返回最相似的文件。
如果你需要更多的東西簡單我會嘗試用完整的產品代碼搜索開始,然後如果不行嘗試使用通配符/刪除一些字符,直到返回結果。
這聽起來像你想要的是levenshtein distance。
不幸的是,沒有一個內置的MySQL萊文斯坦的功能,但有些人想出了一個user-defined function that does it。
JD Isaacks。
你的這種情況很容易解決。 這不像你需要使用Google這樣的人工智能。
http://www.w3schools.com/sql/sql_wildcards.asp
看看本手冊的有關通配符W3Schools的與你的SELECT
代碼中使用。
但是,您還需要創建一個3列的新表格:LeftCode
,RightCode
和WildCard
。
實施例:
上表行:
SQL代碼
如果用戶鍵入該表的ROW1相匹配的代碼:
SELECT * FROM PRODUCTS WHERE CODE LIKE "$WildCard";
哪裏$WildCard
是包含第3列的PHP變量的新表。
我希望我幫助,甚至4年晚...
你如何確定最接近?你的算法是什麼? – 2009-10-29 14:22:38
你是什麼意思產品的風格編號?產品代碼的模式? – 2009-10-29 14:23:03
因此,您將使用SG-sfs35s在數據庫中的字段上執行LIKE操作? – Zoidberg 2009-10-29 14:23:21