2016-11-25 10 views
0

春とmysql私はmysqlのテーブルを持っています国家、市、地区と弁護士テーブル。今、ユーザーがUIシナリオでタグを提供することで検索することができます国の都道府県別ユーザーを検索

1->ユーザーが

3 - >ユーザーが弁護士を検索することができます

2 - >ユーザーは、市内で弁護士を検索することができ地区で弁護士を検索することができます>国家によって、

4 - >ユーザは州、市や地区

、6-によって弁護士を検索することができます>国

によって

5-弁護士を検索することができます>ユーザー、弁護士とすべての4つのテーブルの国とテーブルの関係がどうなるかの効率的かつ高速な検索のためのより多くの罰金きめ検索

のための4つのすべてを提供することができます - ユーザーは州および市

7のみで弁護士を検索することができます州、市や地区

私はすでに-----状態---------多くのリレーションシップ 国--- 1を次のように国、州、市や地区の表を作りました---多くの - 市------------多くの---------区域

しかし、今私は弁護士との関係を確立したいテーブルなので、名前を持つ検索弁護士や上記の検索基準からのものが必要な場合は、テーブルを照会することで迅速に結果を最適化することができます。

lawyerid、stateId、countryId、cityidおよびdistrictIdを含むテーブルをもう1つ作成する必要がありますか?

答えて

0

5つのテーブルを作成することをお勧めします。

主キーを持つ区域。

地区に主キーと参照(外部キー)を持つ都市。

主キーとその都市への参照(外部キー)を持つ状態。

主キーとその状態への参照(外部キー)を持つ国。

国、州、市および地区への主キーと参照(外部キー)を持つ弁護士。あなたは、シンプルで早いのが特長LEFTを作成します検索中に

は、ののJOIN:

SELECT lawyer.name, lawyer.data 
FROM lawyer 
LEFT JOIN country ON lawyer.country_id = country.id 
WHERE country.name = "USA"; 

以上COMPEXクエリ用:

SELECT lawyer.name, lawyer.data 
FROM lawyer 
LEFT JOIN ON state lawyer.state_id = state.id 
LEFT JOIN ON city lawyer.city_id = city.id 
LEFT JOIN district lawyer.district_id ON = district.id 
WHERE STATE_NAME = "Alabama" 
                AND city.name = "Birmingham" 
                AND district.name = "Northern"; 

その他には、クエリに応じて、同様に表示されます。

許容されるほど速くなければなりません。

関連する問題