Мне нужна помощь с моим триггером. У меня есть два «продукта» и «хранилище». Идея заключается в том, что когда я запускаю обновление по столбцу «флаг» в табличном хранилище, триггер должен вычислять запас для правильного идентификатора, но всегда возвращать неправильное значение для всего продукта, см. Прикрепление. Значение правого запаса должно быть для «Test» 10 шт. И для «aaaaaa» 5 шт. Спасибо за помощь.
таблица продуктов:
CREATE TABLE `products` ( `id` int(11) NOT NULL, `subcategory_id` int(11) NOT NULL, `product_name` varchar(255) COLLATE utf8_bin NOT NULL, `product_description` varchar(255) COLLATE utf8_bin NOT NULL, `product_price` int(11) NOT NULL, `product_type` varchar(1) COLLATE utf8_bin NOT NULL, `product_quantity` int(11) NOT NULL ) ENGINE=InnoDB; INSERT INTO `products` (`id`, `subcategory_id`, `product_name`, `product_description`, `product_price`, `product_type`, `product_quantity`) VALUES (45, 11, 'Test', 'test', 1111, 'G', 15), (46, 11, 'aaaaaa', 'aaaaaa', 12, 'G', 15);
таблица хранения:
CREATE TABLE `storage` ( `id` int(11) NOT NULL, `product_id` int(11) NOT NULL, `flag` varchar(1) COLLATE utf8_bin NOT NULL DEFAULT 'A' ) ENGINE=InnoDB; INSERT INTO `storage` (`id`, `product_id`, `flag`) VALUES (46, 45, 'A'), (47, 45, 'A'), (48, 45, 'A'), (49, 45, 'A'), (50, 45, 'A'), (51, 45, 'A'), (52, 45, 'A'), (53, 45, 'A'), (54, 45, 'A'), (55, 45, 'A'), (56, 46, 'A'), (57, 46, 'A'), (58, 46, 'A'), (59, 46, 'A'), (60, 46, 'A');
Триггер mysql:
DELIMITER $$ CREATE TRIGGER `tg_ai_table22` AFTER UPDATE ON `storage` FOR EACH ROW UPDATE products SET products.product_quantity = (SELECT COUNT(product_quantity) FROM STORAGE, (SELECT id FROM products) as prod WHERE prod.id = storage.product_id AND storage.flag = 'A' LIMIT 1) $$ DELIMITER ;
PHP Функция: Контроллер корзины:
public function addToCart() { $id = $this->uri->segment(3); $data = $this->ProductModel->selectProductToCart($id); $cartData = array(); foreach ($data as $datas) { $cartData = array( 'id' => $datas->id, 'qty' => 1, 'price' => $datas->product_price, 'name' => $datas->product_name ); } $this->cart->insert($cartData) ? $this->db->limit(1)->set('flag', 'C')->where('product_id', $cartData['id'])->where('flag', 'A')->update('storage') : ''; } public function updateCart() { $updatedCartData = $this->input->post(); for ($i = 1; $i <= sizeof($this->cart->contents()); $i++) { if ($this->cart->contents()[$updatedCartData[$i]['rowid']]['rowid'] == $updatedCartData[$i]['rowid']) { if ($this->cart->contents()[$updatedCartData[$i]['rowid']]['qty'] > $updatedCartData[$i]['qty']) { $result = $this->cart->contents()[$updatedCartData[$i]['rowid']]['qty'] - $updatedCartData[$i]['qty']; for ($j = 1; $j <= $result; $j++) { $this->db->limit(1)->set('flag', 'A')->where('product_id', $this->cart->contents()[$updatedCartData[$i]['rowid']]['id'])->where('flag', 'C')->update('storage'); } } else { $result = $updatedCartData[$i]['qty'] - $this->cart->contents()[$updatedCartData[$i]['rowid']]['qty']; for ($j = 1; $j <= $result; $j++) { $this->db->limit(1)->set('flag', 'C')->where('product_id', $this->cart->contents()[$updatedCartData[$i]['rowid']]['id'])->where('flag', 'A')->update('storage'); } } } } $this->cart->update($updatedCartData); $this->session->set_flashdata('category_success', 'Kosik bol aktualizovany.'); redirect('Cart'); }
ProductController:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Product extends MY_Controller { public function __construct() { parent::__construct(); $this->load->model('ProductModel'); } public function index($id) { $data['product'] = $this->ProductModel->selectProduct($id); $this->load->view('HeaderView'); $this->load->view('UpperMenuView'); $this->load->view('LeftMenuView'); $this->load->view('ProductView', $data); $this->load->view('FooterView'); } }
ProductModel:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ProductModel extends CI_Model { private $table = 'products'; public function __construct() { parent::__construct(); } function selectProduct($id) { return $this->db->get_where($this->table, array('subcategory_id' => $id))->result(); } function selectProductToCart($id) { return $this->db->get_where($this->table, array('id' => $id))->result(); } public function insertProduct($data) { $this->db->insert($this->table, $data); } public function insertProductToStorage($data) { $this->db->insert('storage', $data); } }
ProductView:
<div class="col-md-9"> <?php $this->load->view('FlashMessagesView'); ?> <ul class="list-unstyled" id="products" data-role="list"> <?php foreach ($product as $value): ?> <li class="span3 col-md-3"> <div class="thumbnail"> <a href="product_details.html"><img src="<?php echo base_url('assets/img/12.jpg'); ?>"/></a> <div class="caption" style="height: 300px; overflow: hidden"> <h5><?php echo $value->product_name; ?></h5> <p><?php echo $value->product_description; ?></p> </div> <div class="product_footer caption"> <?php if ($value->product_quantity == 0) { ?> <p style="text-align: center"><span style="color:orange"><b>Ordered on request.</b></span></p> <?php } else { ?> <p style="text-align: center"> <span style="color:green"> <b>In stock <?php echo $value->product_quantity ?> pcs.</b> </span> </p> <?php } ?> <h4> <a type="button" href="<?php echo base_url('Cart') ?>" id="<?php echo $value->id ?>" class="btn btn-success">Buy</a> <span class="pull-right"><?php echo $value->product_price; ?> €</span> </h4> </div> </div> </li> <?php endforeach; ?> </ul> </div>