Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Многомерный массив в базу
 
 автор: Port_Artur3   (14.02.2015 в 19:33)   письмо автору
 
 

Есть массив:

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:56)   письмо автору
 
   для: 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";

  Ответить  
 
 автор: Sfinks   (14.02.2015 в 21:40)   письмо автору
 
   для: 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');

  Ответить  
 
 автор: Port_Artur3   (14.02.2015 в 21:49)   письмо автору
 
   для: Sfinks   (14.02.2015 в 21:40)
 

Sfinks, Спасибо конечно, НО.

Мне нужен код на PHP который обработает переменную $m с массивом указанном в первом сообщении (я указал всего лишь 3 элемента массива ([0], [1], [2]) из нескольких тысяч), без кода никак не не обойтись к сожалению.

  Ответить  
 
 автор: Sfinks   (14.02.2015 в 22:47)   письмо автору
 
   для: Port_Artur3   (14.02.2015 в 21:49)
 

Тогда вы, как минимум, разделом форума ошиблись.
Обход массива в цикле и объединение строк в запрос не имеют отношения к SQL.
Вам в Форум PHP

  Ответить  
 
 автор: Sfinks   (14.02.2015 в 22:53)   письмо автору
 
   для: Sfinks   (14.02.2015 в 22:47)
 

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

  Ответить  
 
 автор: confirm   (15.02.2015 в 11:49)   письмо автору
 
   для: 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, а тем более не превышает его. Если у вас тысячи и объем данных большой, возможно превышающий значение этой опции, то нужно приготовить несколько таких пакетов, а уже затем сделать несколько запросов, или сразу делать запрос после первого приготовленного пакета и т.д.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования