0

レーベンシュタイン距離と比率のソースコードを使用してmysqlユーザー関数を作成しました。2つのレコードを比較しており、75%の一致に基づいて、レコードを選択します。

  1. 注文はタイトルpaypal_ipn_orders付きでテーブルに表示されますITEM
  2. クエリがテーブルに対して実行され、同様itemkeyに呼び出されたレコードで75%の一致が検出されますITEM
  3. 75%のタイトルが一致する場合、テーブルからテーブルに8桁の数字が割り当てitemkeyられます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のサブクエリは、1つの値のみを返す必要があります。itemkeyにitem_nameの75%である複数のアイテムがある場合、何をしますか?以下は、ベストマッチの1つを使用します。

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 に答える