2009-10-29 196 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年晚...