0

郵便番号エリアのコンマ区切りリストであるフィールドをStore含むテーブルがあります。deliveryPostcodes

id    deliveryPostcodes
1     EC1,EC2,N1
2     EC1,WC1,WC2
3     N1,N2

郵便番号に一致する店舗についてこのテーブルをクエリしたいと思います。たとえば、ユーザーが入力した場合EC2A 9XY、最初の行が返されます。これは、完全な郵便番号のプレフィックスであるエントリがリストに含まれているためです。

カスタム関数なしでそれを行う解決策はありますか?

注: 行ごとに 1 つの郵便番号エリアを含む別のテーブルを結合することで、これを実行できることはわかっていますが、現時点ではさまざまなオプションを検討しています。

4

2 に答える 2

0

本当の答えではありませんが、この問題の唯一の正しい解決策は、データを正規化し、別のテーブルに入れることです。あなたの解決策は次のとおりです。

  1. 索引付けに悪い
  2. 検索が悪い
  3. これを正規表現で解決すると、パフォーマンスが大幅に低下します
  4. この種の構造は、データベースが大きくなり始めると問題を引き起こします。

郵便番号を含むルックアップ テーブルも後で役立つ場合があります。必要な国 (または contries) の郵便番号のリストは、おそらく最小限の作業で MySQL にインポートできる形式であっても、Google で簡単に見つけることができます。

于 2013-09-30T14:42:37.073 に答える
0

DeliveryPostcodes が数値であると仮定すると、次のような正規表現マッチングを試すことができます。

SELECT * 
FROM Store
WHERE deliveryPostcodes RLIKE '.*,?[0-9]+,?.*'
于 2013-09-30T10:14:21.330 に答える