Задать вопрос

Как JSON файл с большим количеством строк передать в MySQL?

Добрый день имеется JSON база такого типа:
{"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}}
{"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}}
{"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}}
{"_id":1270260,"name":"State of Haryāna","country":"IN","coord":{"lon":76,"lat":29}}
{"_id":708546,"name":"Holubynka","country":"UA","coord":{"lon":33.900002,"lat":44.599998}}

Надо при помощи PHP перенести ее в mysql. В mysql уже создана таблица со столбцами (id,name,country,lon,lat).
Подскажите как лучше это сделать?
  • Вопрос задан
  • 509 просмотров
Подписаться Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Лучше делать запрос не для каждой строки, а формировать пакетные запросы INSERT INTO (...) VALUES (...), (...), ...
При этом надо учитывать максимальную длину запроса MySQL, заданную в переменной 'max_allowed_packet'.
Перед работой скрипта лучше отключить все индексы по таблице, после включить их обратно.
Ответ написан
Комментировать
desnomad
@desnomad Автор вопроса
JS
Спасибо тем кто пытался помочь, я написал вот такой код:
$connect = mysql_pconnect("localhost","root","") or die ("Невозможно подключение к MySQL"); // Соединяемся с базой mysql (адрес, имя пользователя, пароль)
	mysql_select_db("weather", $connect) or die ("Невозможно открыть таблицу с данными"); // подключаемся к базе (имя базы, $connect)
	mysql_query("SET NAMES 'utf8'", $connect); // задаем кодировку
	$filename = "template/city.list.json"; // местонахождения json базы
	if ($file = fopen($filename, "r")) { // открываем json файл
		while (!feof($file)) { // проходимся циклом пока не достигнем конца файла 
			$line = fgets($file, 1024); // возвращаем каждую строку файла
			$data = json_decode($line, true); // декодируем json массив в php массив
			$result = mysql_query ("INSERT INTO weather_country (id, name, country, lon, lat) VALUES ('".$data['_id']."', '".$data['name']."', '".$data['country']."', '".$data['coord']['lon']."', '".$data['coord']['lat']."')"); // записываем полученые данные в таблицу weather_country.
		}
	}
	if (isset($result)){ // выводим результат работы скрипта
  		echo "Добавлено в базу данных.";
  	} else {
  		echo "Недобавлено в базу данных.";
  	}


Если кто то знает более изящное и правильное написание, прошу поделится!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы