Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помощь в написании запрса к БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Оптимизировать запрос
Maha
Отправлено: 30 Декабря, 2013 - 15:10:58
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Всех с натупающим)))
Пожалуйста, помогите переписать запрос
PHP:
скопировать код в буфер обмена
  1. $query = "INSERT INTO ordered_product (order_id, product_id, quantity)  VALUES (:ord, :prod, :qty)";
  2.                 $result = $db->prepare($query);
  3.                 $result->bindParam(':ord', $ord);
  4.                 $result->bindParam(':prod', $prod);
  5.                 $result->bindParam(':qty', $qty);
  6.                 foreach($_SESSION['cart'] as $product_id => $value){
  7.                         $ord = $oder_id;
  8.                         $prod = $product_id;
  9.                         $qty = $value;
  10.                         $result->execute();
  11.                 }
  12.                

В продукт-id попадает id заказанного товара, в $value попадает (int) количество этого товара.
Если заказано более одного товара, например 10-ть разных товаров, у которых свой id и свое количество, то в базу полетит 10-ть отдельных insert-ов.
Помогите, пожалуйста, переписать запрос так, чтобы все эти 10-ть значений вставлялись одним запросом.
Заранее спасибо огромное, если кто откликнется.

(Отредактировано автором: 30 Декабря, 2013 - 15:51:26)

 
 Top
eai
Отправлено: 30 Декабря, 2013 - 15:14:21
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. INSERT INTO ordered_product (order_id, product_id, quantity)  
  2. VALUES (:ord, :prod, :qty),
  3. (:ord1, :prod1, :qty1),
  4. (:ord2, :prod2, :qty2)
  5.  

К примеру так

(Отредактировано автором: 30 Декабря, 2013 - 15:15:13)

 
 Top
Maha
Отправлено: 30 Декабря, 2013 - 15:21:46
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




eai пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. INSERT INTO ordered_product (order_id, product_id, quantity)  
  2. VALUES (:ord, :prod, :qty),
  3. (:ord1, :prod1, :qty1),
  4. (:ord2, :prod2, :qty2)
  5.  

К примеру так

Чего-то я туплю, никак не соображу, как мне все это в цикл запихнуть... Однако
Я же не знаю сколько разных товаров закажет пользователь, может один, а может 10-ть... То есть надо еще в один цикл все это обернуть?

(Отредактировано автором: 30 Декабря, 2013 - 15:26:22)

 
 Top
eai
Отправлено: 30 Декабря, 2013 - 15:26:46
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Надо запрос в цикле готовить
 
 Top
Maha
Отправлено: 30 Декабря, 2013 - 15:31:59
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




eai пишет:
Надо запрос в цикле готовить

Ура, дошло!!! СПАСИБО!!!
 
 Top
eai
Отправлено: 30 Декабря, 2013 - 15:33:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Ну я понятное дело не проверял

PHP:
скопировать код в буфер обмена
  1. $query = "INSERT INTO ordered_product (order_id, product_id, quantity)  VALUES" ;
  2.  
  3. $i = 0;
  4. $insertParams = [];
  5. foreach($_SESSION['cart'] as $product_id => $value)
  6. {
  7.         $o = new stdClass;
  8.         $o->prod = $product_id;
  9.         $o->qty = $value;
  10.        
  11.         $insertParams[$i] = $o;
  12.         $insert[$i] = "(:ord, :prod$i, :qty$i)";
  13.  
  14. $i++;
  15. }      
  16.  
  17. $qry .= implode(",",$insert);
  18.  
  19. $result = $db->prepare($query);
  20. $result->bindParam(':ord', $oder_id);
  21.                
  22. foreach($insertParams as $k => $v)                
  23. {
  24.         $result->bindParam(":prod$k", $insertParams[$k]->prod);
  25.     $result->bindParam(":qty$k", $insertParams[$k]->qty);
  26. }
  27.  
  28. $result->execute();
  29.  

(Отредактировано автором: 30 Декабря, 2013 - 15:36:39)

 
 Top
Maha
Отправлено: 30 Декабря, 2013 - 15:43:20
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Еще раз Огромное спасибо, смысл ясен. С наступающим! Улыбка
 
 Top
eai
Отправлено: 30 Декабря, 2013 - 15:53:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Maha пишет:
Еще раз Огромное спасибо, смысл ясен. С наступающим! Улыбка

И тебя, с тебя +1
 
 Top
Maha
Отправлено: 17 Января, 2014 - 18:06:46
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




eai пишет:
Maha пишет:
Еще раз Огромное спасибо, смысл ясен. С наступающим! Улыбка

И тебя, с тебя +1


Пишет "Количество сообщений недостаточно...(((" Я обязательно поблагодарю, когда получится... Огорчение
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB