2012-02-29 3 views
0

Пользователь хочет купить let'say 30 пунктов, есть ли другой способ, чем сделать цикл for?Как сделать несколько запросов MYSQL

, как я могу сделать 30 вставок

public function buy($item_id) 
{ 
    $price = $this->input->post('price'); 
    $amount = $this->input->post('amount'); 
    $sum = $this->input->post('sum'); 
    $price = intval($price); 
    $amount = intval($amount); 
    $sum = intval($sum); 

    if(!is_numeric($price) || !is_numeric($amount) || !is_numeric($sum)) 
    { 
     exit("Неверные значения"); 
     return false; 
    } 

    if(!empty($_SESSION['id'])) 
    { 
     $user_id = $_SESSION['id']; 
    } 
    else 
    { 
     echo 'not logged'; 
     exit(); 
    } 
    $q = $this->db->query("SELECT * FROM users WHERE id = ".$user_id); 
    $t = $this->db->query("SELECT * FROM items WHERE id = ".$item_id." AND 
    TO_DAYS(end) - TO_DAYS(now()) >= 0"); 
    if($this->db->affected_rows() != 0) 
    { 
     $user = $q->result_array(); 
     $item = $t->result_array(); 
     $active = $user[0]['active']; 
     $user_id = $user[0]['id']; 
     $money = $user[0]['money']; 
     $price = $item[0]['price']; 
     $bought_times = $item[0]['bought_times']; 
     $coupons = $item[0]['coupons']; 
     $discount = $item[0]['discount']; 
     $short_desc = $item[0]['short_desc']; 
     $status = ""; 

     //echo $coupons; 
     //exit(); 
     for($i = 0; $i < $amount; $i++) 
     { 
      if($coupons <= 0 || ($amount > $coupons)) 
      { 
       $status = 'out of coupons'; 
       break; 

      } 
      if($money >= $price) 
      { 
       $money = $money - $price; 
       $this->db->query("INSERT INTO user_items (`discount`, `short_desc`, `user_id`) 
       VALUES(".$discount.", '".$short_desc."', ".$user_id.")"); 
       $this->db->query("UPDATE users SET money = ".$money." WHERE id = ".$user_id); 
       $coupons -= 1; 
       $this->db->query("UPDATE items SET coupons = ".$coupons." WHERE id = ".$item_id); 
       $q = $this->db->query("SELECT * FROM users WHERE id = ".$user_id); 
       $user = $q->result_array(); 
       $money = $user[0]['money']; 
       $_SESSION['money'] = $money; 
       $status = 'buy successfull'; 
       //redirect(''); 
      } 
      else 
      { 
       // 
       $status = 'not enough money'; 
       break; 

      } 

     } 
     switch($status) 
     { 
      case 'out of coupons': 
      echo 'out of coupons'; 
      break; 

      case 'buy successfull': 
      $bought_times += 1; 
      $this->db->query("UPDATE items SET bought_times = ".$bought_times." WHERE id = ".$item_id); 
      echo 'buy successfull'; 
      break; 

      case 'not enough money': 
      echo 'not enough money'; 
      break; 
     } 
     /*foreach($q->result_array() as $u); 
     { 
      $_SESSION['id'] = $u[0]->id; 
      $_SESSION['email'] = $u[0]->email; 
      redirect(''); 

     }*/ 
     //return 'trolol'; 
    } 
    else 
    { 
     echo 'out of time'; 
    } 
    //echo $user_id; 
} 

это контроллер, который AJAX-запросы, в моей локальной машине все ее ОКЕЙ, но хостинг его выдает ошибку.

мне нужно вычесть деньги и вычитать купоны и вставить строки зависит от пользователей составит

вы можете дать мне совет относительно этого кода?

+0

Другими словами, я имею в виду, как я могу оптимизировать этот код ???, я не знаю, как сделать петлю правой, которая вставляет элементы вправо –

+0

Почему вы не используете класс codeigniter cart? –

ответ

1

сделать ваш запрос более динамичным, имеющим один удар запрос только попытаться сделать конкатенацию, используя цикл, который может производить что-то запрос, как:

INSERT INTO my_table(column1, column2, column3) VALUES ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3') ... 

в этом случае вы сможете бросить только один запрос, но вставляет несколько элементов в таблицу, просто разделяя каждый набор значений запятой (,).

+0

но как я могу сделать это в цикле? как я могу поставить петлю между этими запятыми? если это зависит от суммы –

+1

«но как я могу сделать это в цикле?» => использовать цикл foreach для конкатенации значений в запросе sql – Rooneyl

+0

СПАСИБО БОЛЬШЕ ДЛЯ ЭТОЙ ИДЕИ !!! –

Смежные вопросы