我想显示产品的最近的相关项目。所以说我正在展示一款产品,样式编号是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