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 内のコードはデータベース内のコードと (構文上) 完全に一致していないため、DB に BS709 (BS70923) を含む 2 つの製品があるとします。コード 私は複数の一致を取得します。

これを行うより良い方法はありますか?

4

2 に答える 2

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