Здравствуйте, помогите пожалуйста решить мою задачу. У меня есть три таблицы в базе данных: Материк, Страна, Город.
Мне нужно по названию города определить страну и материк. Как я понимаю, для этого нужно перебрать Материки, Страны и Города, но я абсолютно не понимаю как это сделать, чтобы в итоге я получил три переменные с тремя id (материк, страна, город).
Вот как выглядит база данных:
Таблица “Материки”
id материка , name материка
.
Таблица “Страны”
id страны , id материка , name страны
.
Таблица “Города”
id города , id страны , name города
Я уже получил материки из базы данных и поместил их в Объекты. Нужно чтобы алгоритм перебирал внутри каждого материка страны и внутри каждой страны города до тех пор, пока не найдет города. Когда город найден, нужно чтобы у меня были переменные с id города, материка и страны.
Сразу загружать все города будет очень долго, поэтому думаю, что перебирать поочереди будет лучше. Возможно ошибаюсь.
Я изучаю JS, других языков не знаю, поэтому на JS нужно.
Как выглядят json:
{"id":1,"materik":"name"}
{"id":1,"materik_id":2,"strana":"name"}
{"id":1,"strana_id":2,"gorod":"name"}
Города не пересекаются, так как в каждой стране на своём языке написано название.
Можете написать код, который позволит мне по name города определить id страны и материка ? Сам не могу разобраться , на готовом примере будет куда проще вникнуть..
var continents = [
{"id":1,"materik":"Africa"},
{"id":2,"materik":"America"}
];
var countries = [
{"id":1,"materik_id":"2","strana":"Canada"},
{"id":2,"materik_id":"1","strana":"Gabon"}
];
var cities = [
{"id":1,"strana_id":"1","gorod":"Toronto"}
];
var cityName = "Toronto";
var city = cities.find(function(item){
return item.gorod == cityName;
});
if (city) {
var country = countries.find(function(item){
return item.id == city.strana_id;
});
if (country) {
var continent = continents.find(function(item){
return item.id == country.materik_id;
});
console.log(city);
console.log(country);
console.log(continent);
}
}
При правильном подходе ваши структуры данных будут иметь вид
var continents = {
"1": {"materik":"Africa"},
"2": {"materik":"America"}
};
var countries = {
"1": {"materik_id":"2","strana":"Canada"},
"2": {"materik_id":"1","strana":"Gabon"}
};
var cities = {
"1": {"strana_id":"1","gorod":"Toronto"}
};
Далее, при правильном подходе извлечения чего-либо из данных по названию города не будет производиться. Вместо этого будет производиться извлечение по ID.
Примерно так в целом:
continents[countries[cities[1].strana_id].materik_id].materik
При еще более правильном подходе все это будет делаться на стороне базы данных, поскольку в реальном мире городов очень много, и эти данные не удастся закэшировать на клиенте, чтобы разгрузить сервер, или я не знаю, на что вы еще рассчитывали с подходом из вопроса. В принципе, это целесообразно только в том случае, если вы на сервисе на базе Node.js хотите закэшировать таблицы в памяти.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Раскрывать элемент диаграммы по которому кликнулиНа входе такой массив, где child - это это те элементы, которые надо раскрыть
Проблема при конвертации heic в jpgИспользую официальную библиотеку на js
В официальном гайде angular2 для сущности Hero рекомендуется использовать пользовательский тип для данных: