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

Форум PHP

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

 

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

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

тема: Один запрос вместо цикла
 
 автор: Sergeous   (22.04.2012 в 17:50)   письмо автору
 
 

Есть массив $moments3 со значениями. Пример:
[1045] => Array
        (
            [minute] => 91
            [minute_s] => 91
            [seconds] => 6480
            [text] => Игрок 29 идет в отбор
            [goals1] => 5
            [goals2] => 4
            [type] => ref
            [shots1] => 11
            [shots2] => 6
            [shots_v_stvor1] => 9
            [shots_v_stvor2] => 4
            [uglovye1] => 3
            [uglovye2] => 1
            [offside1] => 8
            [offside2] => 3
            [narusheniy1] => 4
            [narusheniy2] => 3
            [yellow1] => 2
            [yellow2] => 0
            [red1] => 0
            [red2] => 0
            [vladenie1] => 45.0549450549
            [vladenie2] => 54.9450549451
            [team] => 0
        )

    [1046] => Array
        (
            [minute] => 91
            [minute_s] => 91
            [seconds] => 6480
            [text] => 29 играет чисто
            [goals1] => 5
            [goals2] => 4
            [type] => ref
            [shots1] => 11
            [shots2] => 6
            [shots_v_stvor1] => 9
            [shots_v_stvor2] => 4
            [uglovye1] => 3
            [uglovye2] => 1
            [offside1] => 8
            [offside2] => 3
            [narusheniy1] => 4
            [narusheniy2] => 3
            [yellow1] => 2
            [yellow2] => 0
            [red1] => 0
            [red2] => 0
            [vladenie1] => 45.0549450549
            [vladenie2] => 54.9450549451
            [team] => 0
        )

    [1047] => Array
        (
            [minute] => 91
            [minute_s] => 91
            [seconds] => 6480
            [text] => 1.8 идет вперед
            [goals1] => 5
            [goals2] => 4
            [type] => 0
            [shots1] => 11
            [shots2] => 6
            [shots_v_stvor1] => 9
            [shots_v_stvor2] => 4
            [uglovye1] => 3
            [uglovye2] => 1
            [offside1] => 8
            [offside2] => 3
            [narusheniy1] => 4
            [narusheniy2] => 3
            [yellow1] => 2
            [yellow2] => 0
            [red1] => 0
            [red2] => 0
            [vladenie1] => 45.0549450549
            [vladenie2] => 54.9450549451
            [team] => 0
        )

    [1048] => Array
        (
            [minute] => 91.3333333333
            [minute_s] => 91.3333333333
            [seconds] => 6500
            [text] => С мячом игрок 8
            [goals1] => 5
            [goals2] => 4
            [type] => ref
            [shots1] => 11
            [shots2] => 6
            [shots_v_stvor1] => 9
            [shots_v_stvor2] => 4
            [uglovye1] => 3
            [uglovye2] => 1
            [offside1] => 8
            [offside2] => 3
            [narusheniy1] => 4
            [narusheniy2] => 3
            [yellow1] => 2
            [yellow2] => 0
            [red1] => 0
            [red2] => 0
            [vladenie1] => 45.0549450549
            [vladenie2] => 54.9450549451
            [team] => 0
        )

    [1049] => Array
        (
            [minute] => 91.3333333333
            [minute_s] => 91.3333333333
            [seconds] => 6500
            [text] => Игрок 29 идет в отбор
            [goals1] => 5
            [goals2] => 4
            [type] => ref
            [shots1] => 11
            [shots2] => 6
            [shots_v_stvor1] => 9
            [shots_v_stvor2] => 4
            [uglovye1] => 3
            [uglovye2] => 1
            [offside1] => 8
            [offside2] => 3
            [narusheniy1] => 4
            [narusheniy2] => 3
            [yellow1] => 2
            [yellow2] => 0
            [red1] => 0
            [red2] => 0
            [vladenie1] => 45.2554744526
            [vladenie2] => 54.7445255474
            [team] => 0
        )



Сейчас я записываю в базу это так.
    foreach($moments3 as $p =>  $moment)
{

          $moment['seconds'] = $match_info ['matchs_date'] +  $moment['seconds'] /$dlina;
  dbquery 
  ("INSERT INTO matchs_moment  
  (`moment_matchs_id`,  `moment_text`, moment_type,  `moment_goals1`, `moment_goals2`, moment_date_real,  moment_seconds,  moment_minute) 
    VALUES (
   $match_id,
    
   '".$moment['text']."', 
    '".$moment['type']."', 
      '".$moment['goals_1']."', 
     '".$moment['goals2']."',
     '".$moment['seconds']."', 
         '".$moment['seconds']."', 
   '".$moment['minute']."')
  
  "); 
   
  }


Как записать массив одним запросом?

  Ответить  
 
 автор: confirm   (22.04.2012 в 18:09)   письмо автору
 
   для: Sergeous   (22.04.2012 в 17:50)
 

А первичные ключи этого массива, чем являются? Или это просто порядковый индекс?

  Ответить  
 
 автор: Sergeous   (22.04.2012 в 18:30)   письмо автору
 
   для: confirm   (22.04.2012 в 18:09)
 

Просто номер

  Ответить  
 
 автор: confirm   (22.04.2012 в 18:47)   письмо автору
 
   для: Sergeous   (22.04.2012 в 18:30)
 

Тогда в цикле получайте из значений массива только те, ключи которые вы используете (судя по примеру вы не все записываете), функцией array_intersect_key, затем с помощью функции array_map экранируете спецсимволы (тут еще надо разобраться с вашей конфигурацией), а затем implode, чтобы в итоге получилась строка мгогостраничного запроса, которая выглядит как:
(val1.1,val2.1,val3.1,...,valN.1),(val1.2,val2.2,val3.2,...,valN.3), и т.д.
У вас еще некоторые значения рассчитываются, так что не забывайте добавлять и их, после array_intersect_key.
Только учтите, такая строка не может быть сколь угодно большой, и ограничивается настройкой mysql - max_allowed_packet. Это значение можно узнать:
mysql_query("SHOW VARIABLES LIKE 'max_allowed_packet'")
на него и нужно ориентироваться.

  Ответить  
 
 автор: Никчай   (22.04.2012 в 18:48)   письмо автору
 
   для: Sergeous   (22.04.2012 в 18:30)
 

Можно сделать примерно следующее:

$sqd= array();
for($i=0; $i<=count($massiv_s_dannimi); $i++){
 $sqd[]="('".mysql_escape_string($dannie1)."', '".mysql_escape_string($dannie2)."', '".mysql_escape_string($dannie3)."')";};
$sql = "INSERT INTO table (dlya_dannih1, dlya_dannih2, dlya_dannih3) VALUES".implode(',', $sqd);

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

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