我想显示产品最接近的相关项目。所以说我正在展示产品,样式编号是SG-sfs35s。有没有办法选择哪个产品的样式编号最接近?
感谢。
编辑:回答你的问题。好吧,我绝对想保留前2个字母,因为这是制造商代码,但是对于第一个破折号之后的部分,只是最接近的匹配。所以例如SG-sfs35s将比SG-shs35s更匹配SG-shs35s。我希望每当我做 LIKE product_style_number 时它才有意义,它只会拉出完全匹配。
答案 0 :(得分:5)
通常没有简单的方法来匹配大致相似的产品代码。
更友好的SQL解决方案是创建一个新表,将每个产品映射到与其相似的所有产品。
此表要么需要手动维护,要么可以定期执行更复杂的脚本来更新它。
如果您的产品代码遵循一致的模式(类似产品的所有字母都相同,只有数字更改),那么您应该能够使用正则表达式来匹配类似的项目。有here...
的文档答案 1 :(得分:1)
您可能希望将其作为存储过程来执行,因为我预计该算法可能并不简单。
例如,您可以将该术语拆分为-
,因此您有两部分。您对每个部分进行LIKE
查询并使用它来做出决定。
你可以循环,用你的存储过程替换最后一个字符“%”,直到你得到至少一个结果。
答案 2 :(得分:1)
听起来你想要的是 levenshtein distance 。
不幸的是,mysql没有内置的levenshtein函数,但是有些人提出了user-defined function that does it。
答案 3 :(得分:0)
听起来你需要像Lucene这样的东西,虽然我不确定这对你的情况是否有点过分。但它肯定能够进行文本搜索并首先返回最相似的文本。
如果您需要更简单的东西,我会尝试使用完整的产品代码进行搜索,然后如果不起作用,请尝试使用通配符/删除一些字符,直到返回结果。
答案 4 :(得分:0)
JD Isaacks。
你的这种情况很容易解决。 这不像你需要像谷歌那样使用人工智能。
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年......