0

我有一个情况:

我有一个数据库(MySQL),其中包含这样的产品及其代码

BLACK SUGAR BS 709
HOT SAUCE AX889/9
TOMY 8861

我有一个转换为 CSV 的 Excel 电子表格,其中包含产品的价格。它的结构由 2 列组成,代码和价格,如下所示:

BS709          23.00
AX 889 /9      10.89
8861           1.69

我编写了一个脚本来更新产品价格,方法是使用 FOREACH 和 %LIKE% 查询在数据库中搜索相应的产品代码。

CSV 中的 FOREACH 行,使用“WHERE product_code LIKE %code%.

这当然是更新价格的一种原始且不太成功的方法,因为 CSV 中的代码与数据库中的代码不完全匹配(在语法上),所以如果我在数据库中有两个产品,其中包含 BS709 (BS70923)代码我得到多个匹配项。

有没有更好的方法来做到这一点?

4

2 回答 2

0

replace()在比较之前,您可以使用 MySQL 修剪空格和其他字符的列。这将返回所有完全匹配的内容,而不考虑包含的任何空格。

SELECT * FROM table WHERE REPLACE( product_code, ' ', '' ) LIKE 'code'

于 2013-10-29T23:17:25.320 回答
0

鉴于您的示例,我建议从两者中删除所有空格,然后只查找代码的开头或结尾何时完全匹配:

where replace(e.code, ' ', '') like concat(replace(db.code, ' ', ''), '%') or
      replace(e.code, ' ', '') like concat('%', replace(db.code, ' ', '')) or
      replace(db.code, ' ', '') like concat(replace(e.code, ' ', ''), '%') or
      replace(db.code, ' ', '') like concat('%', replace(e.code, ' ', ''));

当一个代码是另一个代码的前缀时,这可能不适用于特定情况。

无论如何,如果电子表格中的产品代码与数据库中的产品代码不同,我认为你有更大的问题。如果您不能真正修复电子表格,我建议您手动/半自动在数据库中创建同义词表。这将使 Excel 产品代码在一列中,而正确的产品代码在另一列中。然后,您只需将其连接在一起即可进行查找。

是的。那就是工作。但可能比努力解决这个问题并获得必须反复更新的糟糕结果的工作量更少。

于 2013-10-29T23:34:01.860 回答