0

我使用 levenshtein distance 和 ratio 源代码创建了 mysql 用户函数。我正在比较 2 条记录,并根据 75% 的匹配度来选择记录。

  1. 订单进入paypal_ipn_orders带有ITEM标题的表格
  2. 对表执行查询以itemkey在记录中找到 75% 的匹配项,ITEM同时调用
  3. itemkey如果 75% 的标题匹配,它会在表之间分配一个八位数字paypal_ipn_orders

这是查询

      UPDATE paypal_ipn_orders
      SET sort_num = (SELECT sort_id
      FROM itemkey
      WHERE  levenshtein_ratio(itemkey.item, paypal_ipn_orders.item_name) > 75)
      WHERE packing_slip_printed = 0 
      AND LOWER(payment_status) = 'completed' 
      AND address_name <> ''
      AND shipping < 100

我已经对此进行了几次调整,但它在 levenshtein_ratio 部分的第 4 行和第 5 行之间失败了。如果它有效,则表示子查询返回多于一行。我不知道如何修复它以使其返回正确的结果,我只是不知道如何使它工作。

4

1 回答 1

2

SET 上的子查询应该只返回一个值。如果 itemkey 有一个以上的 item_name 的 75% 你想做什么?下面将使用最佳匹配之一:

UPDATE paypal_ipn_orders
SET sort_num = (SELECT sort_id
  FROM itemkey
  WHERE  levenshtein_ratio(itemkey.item, paypal_ipn_orders.item_name) > 75
  ORDER BY levenshtein_ratio(itemkey.item, paypal_ipn_orders.item_name) DESC
  LIMIT 1)
WHERE packing_slip_printed = 0 
  AND LOWER(payment_status) = 'completed' 
  AND address_name <> ''
  AND shipping < 100
于 2012-08-06T22:08:41.877 回答