2012-02-01 14 views
2

私は住所の概念を持つシステムを持っています(郵便番号のように)。 Address1-4、City、PostCodeのフィールドを持つAddressテーブルがあります。郵便番号の保存と照会

私はUIで簡単にクエリできるように、このアドレスデータを保存する最善の方法を見つけようとしています。ユーザーは一般に、別のフィールド(おそらく郵便番号を除く)があることを認識していないので、5つの検索フィールドに正しい文字列を入力するように頼んでも機能しません。私はそれがアドレスの一部と試行して一致する単一の検索フィールドである必要があると感じています。例えば

Address1: Flat 23 
Address2: Big Towers 
Address3: 1 Baker Street 
Address4: (Blank) 
City: London 
PostCode: W1U 6AA 

だから、「ビッグ・タワーズでフラット23」を見つけたい場合、私は、クエリボックスに「23ビッグタワー」や「ビッグ・タワー23」と入力し、それを期待したいかもしれません例えば上記を見つける。しかし、フィールドが分​​離されているため、これは達成するのが難しいです。

このアプリは完全に独占的なので、アドレスの保存方法を変更したり、複数の方法で保存することは完全に可能です。アプリケーションはC#のUIとJavaの中間層です。

住所を保存してユーザーの視点から簡単に検索UI +クエリを構成する方法については、お勧めはありますか?

EDIT:例を追加しました

+0

何デシベルツールを使用してはどうですか?すなわち、全文?これはオプションですか? – wmz

答えて

1

あなたはサードパーティのAPIにフックのオプションを持っていますか?元の文字列を含むGoogleまたはYahooマップにリクエストを送信してから、比較するために使用できるきれいに区切られたデータセットを取得することができます。それは最も簡単かもしれません - Googleのサーバーがあなたのためにそれをやりましょう!直接の答えとして、私は別々に各アドレスのコンポーネントを格納し、APIの検索結果に対してクエリを言うと思います。

私はいくつかの興味深い追加の議論がここにあると思う:あなたの例オフに基づいて

Parse usable Street Address, City, State, Zip from a string

+0

私はすでにデータをきれいに区切っていますが、このデータをできるだけ簡単に検索する方法を見つけるのは難しい問題です。 –

+0

私は、ユーザーに単一のテキスト入力ボックスを与え、Googleに意味のあるアドレスコンポーネントを解析させ、それらのコンポーネント結果をデータベースと比較させ、最も近いものを見つけることを想定していました。 – eouw0o83hf

+0

私は例を追加しました。おそらくもっと明確になります。私はアプリの内部を変更することができますが、私たちはこれを他の会社の内部に配備しています。そのため、Googleのようなものに出かけることを好まず、セキュリティ上の問題が発生します。さらに私は、一般的にではなく、システムに格納されているアドレスを検索したいだけです。たとえば、インストールには数千の関連するアドレスしかない場合があります。 –

2

あなたは(スペース区切り文字付き)他のすべてのフィールドを連結して生成されたフィールドを持つことができます。次に、あなただけのように(あなたの例で)ことを、代わりに他の人のこのフィールドを照会できます。

生成されたフィールド:

Flat 23 Big Towers 1 Baker Street London W1U 6AA 

問合せ:

SELECT 
    * 
FROM 
    Address 
WHERE 
    GeneratedField LIKE '%searchTerm1%' 
AND 
    GeneratedField LIKE '%searchTerm2%' 
AND 
    GeneratedField LIKE '%searchTerm3%' 
+0

これは、検索文字列が2つ以上のフィールドにまたがっている場合の例では機能しません。 –

+0

@Mikeがあなたの例を反映するように更新されました –

0

私はXMLとしてアドレスを格納好き自分のスニペット。町、国、国などの余分な属性のスコープを持ちます

もっと多くのオプションと肘の部屋があります。

0

パラメータ化されたクエリを使用するだけで簡単に実行できます。ただ、MSSQL用%で各テキスト値を囲み、このクエリのパラメータとしてそれらを追加します。

SELECT * FROM Addresses WHERE Address1 LIKE @Address1 OR Address2 LIKE @Address2 OR Address3 LIKE @Address3 OR Address4 LIKE @Address4

parameters.Add("@Address1", String.Format("%{0}%", address1Text.Text)

+0

ユーザーが検索クエリを入力するためのテキストボックスを1つしか持たず、どのフィールドに何が含まれているのかをユーザーが直感的に分かりません。システム内のすべてのアドレスに適用されます。 –