2016-11-25 2 views
0

весна и mysql У меня есть таблицы в mysql Страна Штат, город, округ и юрист стол. Теперь пользователь может искать путем предоставления тега в сценариях пользовательского интерфейса являетсяПоиск пользователя по стране город государственный округ

1-> Пользователь может искать адвокат по районам

2-> Пользователь может искать адвокат по городам

3-> Пользователь может искать адвокат государство,

4-> пользователь может искать адвокат по стране

5-> пользователь может искать адвокат по штату, города и район

6-> Пользователь может искать адвоката только государства и города

7 -> Пользователь может обеспечить все четыре для более оштрафовал зернистой поиска

Для эффективного и быстрого поиска, что бы быть таблица отношения с адвокатом, и все четыре таблицы Country, Штат, город и округ

Я уже сделал стол для страны, штата, города и района со следующим отношением корабля Страна --- одна для многих --------- Государство ------ --- на многих-- Город ------------ на многих --------- Район

, но теперь я хочу установить связь с адвокатом таблицу, поэтому, если кто-то хочет найти адвоката с именем или чем-либо из выше критериев поиска, я бы смог быстро и оптимизировать результат, запросив таблицу.

Должен ли я создать еще одну таблицу, содержащую адвокат, stateId, countryId, cityid и districtId?

ответ

0

Предлагаю вам создать пять таблиц.

Район с первичным ключом.

Город с первичным ключом и ссылкой (иностранный ключ) в район.

Состояние с первичным ключом и ссылкой (внешний ключ) к городу.

Страна с основным ключом и ссылкой (внешний ключ) к состоянию.

И юрист с первичным ключом и ссылки (внешние ключи) в страну, штат, город и округ.

Во время поиска будет создан простой и быстрый LEFT JOIN'S:

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"; 

Другие будут появляться так же, в зависимости от запроса.

Должно быть приемлемо быстро.

Смежные вопросы