Ich brauche Hilfe mit meinem Auslöser. Ich habe zwei Tabellen "Produkt" und "Speicher". Die Idee ist, wenn ich Update auf Spalte "Flag" in der Tabelle ausführen "Speicher" Trigger müssen Lager für richtige ID berechnen, aber immer den falschen Wert für das gesamte Produkt zurückgeben, siehe Anhang. Der richtige Lagerwert sollte für "Test" 10 Stück und für "aaaaaa" 5 Stück sein. Danke für die Hilfe.Mysql Trigger Return schlechten Aktien Wert
Produkte Tabelle:
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);
Speichertabelle:
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 Trigger:
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 Funktion: Warenkorb Controller:
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');
}
Product:
<?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');
}
}
Product:
<?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>
wo ist dein PHP-Code? –
Hallo, jetzt habe ich einen Beitrag bearbeitet – matus177
Bevor Sie die "Einfügen" -Abfrage ausführen, führen Sie eine andere Abfrage, die für den Bestand überprüft z. B. "Anzahl (*) aus dem Speicher auswählen, wo Produkt = 'Produkt_ID'" nach der Abfrage können Sie einfach $ ausführen number_of_stock = $ query_res-> fetchColumn(); und damit hast du die Anzahl der Aktien –