私のトリガーで助けが必要です。私は2つのテーブル '製品'と 'ストレージ'を持っています。アイデアは、テーブル 'ストレージ'トリガでカラム 'フラグ'の更新を実行するときに、正しいIDの在庫を計算する必要がありますが、常にすべての製品に間違った値を返します。右の株価は「テスト」10個と「aaaaaa」5個の値でなければなりません。手伝ってくれてありがとう。Mysqlトリガーが悪い株価を返す
製品テーブル:
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関数:ProductView
<?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);
}
}
:カートコントローラ:
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あなたのトリガが間違って書かれている
<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>
あなたのPHPコードはどこですか? –
こんにちは、今投稿を編集しました – matus177
"insert"クエリを実行する前に、在庫を確認するantotherクエリを実行します。たとえば、 "product = 'product_id'というストレージからcount(*)を選択します。 number_of_stock = $ query_res-> fetchColumn();これで株式数が –