使用levenshtein距离比来比较2条记录

时间:2012-08-06 21:47:19

标签: mysql distance levenshtein-distance

我使用levenshtein距离和比率源代码创建了mysql用户函数。我正在比较2条记录,基于75%的匹配,我想选择记录。

  1. 订单进入表paypal_ipn_orders,标题为ITEM
  2. 针对表itemkey执行查询,以便在名为ITEM的记录中找到75%匹配
  3. 如果75%的标题匹配,则会将表格itemkey中的八位数字分配到表格paypal_ipn_orders
  4. 这是查询

          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行之间失败了。如果它工作,它表示子查询返回多行。我不知道如何修复它以使其返回正确的结果,我只是失去了如何使这项工作。

1 个答案:

答案 0 :(得分: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