|
|
|
| Есть массив:
Array ( [0] => Array ( [code] => zcrx [name] => SCl [coordinates] => Array ( [lon] => -7.843 [lat] => 30.372 ) [time_zone] => 1/1 [name_translations] => Array ( [de] => Sege [en] => Sege [zh-CN] => 456 [tr] => S3te [ru] => дж [it] => ege [es] => Ste [fr] => Slge [th] => 2345) [country_code] => St )
[1] => Array ( [code] => sdg3 [name] => Aas [coordinates] => Array ( [lon] => 14.047 [lat] => -29.79 ) [time_zone] => 2/2 [name_translations] => Array ( [de] => Abur [en] => Arry [zh-CN] => 345 [ru] => А4ри ) [country_code] => 4 )
[2] => Array ( [code] => hujk [name] => Esh [coordinates] => Array ( [lon] => 3.7523 [lat] => 113.33 ) [time_zone] => 2/1 [name_translations] => Array ( [en] => lrsh [zh-CN] => 234 [tr] => A35h [ru] => Эль-Ариш ) [country_code] => 45 ) )
|
Элементы массива
coordinates и name_translations имеют подмассивы
Помогите пожалуйста этот массив находящийся в переменной $m занести в базу при условии что количество элементов подмассива name_translations каждый раз разное, но общее количество их 9, и они имеют значения:
de, en, zh-CN, tr, ru, it, es, fr, th | |
|
|
|
|
|
|
|
для: Port_Artur3
(14.02.2015 в 19:33)
| | Таблица:
$cy = "CREATE TABLE cy
( code TEXT,
name TEXT,
lon FLOAT,
lat FLOAT,
time_zone TEXT,
de TEXT,
en TEXT,
zh-CN TEXT,
tr TEXT,
ru TEXT,
it TEXT,
es TEXT,
fr TEXT,
th TEXT,
country_code TEXT
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin";
|
| |
|
|
|
|
|
|
|
для: Port_Artur3
(14.02.2015 в 19:33)
| | Надеюсь что вопрос в том как связать данные, а не в том, как их занести в БД?
CREATE TABLE `cities` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`code` varchar(10) CHARACTER SET utf8 NOT NULL,
`name` varchar(50) CHARACTER SET utf8 NOT NULL,
`latitude` float(10,7) NOT NULL,
`longitude` float(10,7) NOT NULL,
`time_zone` varchar(10) CHARACTER SET utf8 NOT NULL,
`country_code` char(2) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
CREATE TABLE `cities_translations` (
`city_id` int(10) unsigned NOT NULL,
`language` varchar(10) CHARACTER SET utf8 NOT NULL,
`name` varchar(50) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`city_id`,`language`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
Назначение полей понятно?
INSERT INTO `cities` (`id`, `code`, `name`, `latitude`, `longitude`, `time_zone`, `country_code`) VALUES
(1, 'zcrx', 'SCl', 30.3719997, -7.8429999, '1/1', 'St'),
(2, 'sdg3', 'Aas', -29.7900009, 14.0469999, '2/2', '4'),
(3, 'hujk', 'Esh', 113.3300018, 3.7523000, '2/1', '45');
|
INSERT INTO `cities_translations` (`city_id`, `language`, `name`) VALUES
(1, 'de', 'Sege'),
(1, 'en', 'Sege'),
(1, 'es', 'Ste'),
(1, 'fr', 'Slge'),
(1, 'it', 'ege'),
(1, 'ru', 'дж'),
(1, 'th', '2345'),
(1, 'tr', 'S3te'),
(1, 'zh-CN', '456'),
(2, 'de', 'Abur'),
(2, 'en', 'Arry'),
(2, 'ru', 'А4ри'),
(2, 'zh-CN', '345'),
(3, 'en', 'lrsh'),
(3, 'ru', 'Эль-Ариш'),
(3, 'tr', 'A35h'),
(3, 'zh-CN', '234');
|
| |
|
|
|
|
|
|
|
для: Sfinks
(14.02.2015 в 21:40)
| | Sfinks, Спасибо конечно, НО.
Мне нужен код на PHP который обработает переменную $m с массивом указанном в первом сообщении (я указал всего лишь 3 элемента массива ([0], [1], [2]) из нескольких тысяч), без кода никак не не обойтись к сожалению. | |
|
|
|
|
|
|
|
для: Port_Artur3
(14.02.2015 в 21:49)
| | Тогда вы, как минимум, разделом форума ошиблись.
Обход массива в цикле и объединение строк в запрос не имеют отношения к SQL.
Вам в Форум PHP | |
|
|
|
|
|
|
|
для: Sfinks
(14.02.2015 в 22:47)
| | А вот то, что вы хотите это сохранять в таблицу, имеющую структуру как в вашем втором посте - это имеет.
И за-за этого, я полагаю, вся трудность.
И я вам подсказал структуру, для сохранения в которую нужно всего-лишь 2 цикла. Один для основных полей и один, вложенный в первый, для переводов. | |
|
|
|
|
|
|
|
для: Port_Artur3
(14.02.2015 в 21:49)
| | Это не сложно, приготавливайте запрос многострочной вставки и выполняйте его. Как лучше вам показали. А сам код:
<?
$sql = 'INSERT INTO table_name (field1, field2, ...) VALUES ('. implode('),(' . array_map(function($v) {
return '"' . implode('","' . array_map('mysql_real_escape_string', $v)) . '"';
}, $array)) . ')';
|
где $array ваш массив. Но так можно поступать, если вы уверены, что таким образом подготовленный для записи пакет не равен по объему max_allowed_packet, а тем более не превышает его. Если у вас тысячи и объем данных большой, возможно превышающий значение этой опции, то нужно приготовить несколько таких пакетов, а уже затем сделать несколько запросов, или сразу делать запрос после первого приготовленного пакета и т.д. | |
|
|
|
|