Как сложить количество из таблицы CodeIgniter и MySql

0

Я новичок в CodeIgniter и все еще изучаю его. Я просто хочу спросить, могу ли я добавить все количество акций на основе идентификатора продукта. У меня есть пять таблиц, которые имеют отношения друг с другом, продукт, бренд, категорию, размер и запасы.

Категория, марка, и размер внешнего ключа на таблицу продуктов в то время как таблица продукт внешний ключ на столе запасов.

Каждый раз, когда есть запас, количество и дата определенного продукта будут сохранены в базе данных. Я хочу знать, как суммировать все запасы конкретного продукта и отображать все общее количество.

База данных: таблица продуктов

CREATE TABLE 'products' (
  'prod_id' int(11) NOT NULL AUTO_INCREMENT,
  'prod_code' varchar(45) NOT NULL,
  'prod_desc' varchar(55) NOT NULL,
  'brand_id' int(11) DEFAULT NULL,
  'category_id' int(11) NOT NULL,
  'size_id' int(11) DEFAULT NULL,
  'original_price' decimal(10,2) NOT NULL,
  'date_registered' timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  'date_modified' timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY ('prod_id'),
  KEY 'category_fk_idx' ('category_id'),
  KEY 'size_fk_idx' ('size_id'),
  KEY 'brand_id_idx' ('brand_id'),
  CONSTRAINT 'brand_id' FOREIGN KEY ('brand_id') REFERENCES 'brand' ('brand_id') ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT 'category_fk' FOREIGN KEY ('category_id') REFERENCES 'category' ('category_id'),
  CONSTRAINT 'size_fk' FOREIGN KEY ('size_id') REFERENCES 'sizes' ('size_id')
) 

таблица запасов

CREATE TABLE 'stocks' (
  'stock_id' int(11) NOT NULL AUTO_INCREMENT,
  'product_id' int(11) DEFAULT NULL,
  'quantity' double DEFAULT NULL,
  PRIMARY KEY ('stock_id'),
  KEY 'prod_fk_idx' ('product_id'),
  CONSTRAINT 'prod_fk' FOREIGN KEY ('product_id') REFERENCES 'products' ('prod_id') ON DELETE NO ACTION ON UPDATE NO ACTION
) 

мой взгляд (product_view.php)

  <div class="col-sm-10" id="main">

    <div class="table-wrapper">
       <div id="content">
           <?php echo $this->session->flashdata('successMessage');
                echo $this->session->flashdata('errorMessage'); ?>
<legend class="text-danger"><h1>Product List</h1></legend>
            <?php   $tableAttr = array(
                    'table_open' => '<table class="table table-responsive table-striped table-hover" id="item_tbl">',
                    );
                                    $item_table = $this->table->set_heading('No.','PRODUCT CODE','PRODUCT DESCRIPTION','BRAND', 'CATEGORY', 'SIZE','QUANTITY','ACTION');
                $item_table = $this->table->set_template($tableAttr);
                $num = 0;
                foreach ($items as $item) {
                    $itemName = urlencode($item->prod_desc);
                    $num++;
                    $item_table = $this->table->add_row($num, $item->prod_code, $item->prod_desc, $item->brand_name,$item->category_name,$item->size,$item->quantity,"

                        <a href='".base_url("item/update/$itemName")."'><button class='btn btn-info btn-sm'>EDIT</button></a> 
                                                    <a href='".base_url("item/stock_in/$itemName")."'><button class='btn btn-primary btn-sm'>STOCK IN</button></a> 
                        ");
                }
                echo $this->table->generate($item_table);  ?>
                </div>

</div>                            
</div>  

контроллер

    public function home () {
    $this->load->model('item_model');

    $data['items'] = $this->item_model->itemList();
    $data['page'] = 'home';

    $this->load->view('header',$data);
    $this->load->view('side_menu');
    $this->load->view('product_view',$data);
    $this->load->view('footer');
}

model (item_model.php)

    public function itemList () {
    $this->load->database();

$this->db->select('p.*,c.category_name,s.size,b.brand_name,t.quantity')

            ->from('stocks t');
              $this->db->join('products p','p.prod_id = t.product_id','full')
                    ->join('category c','p.category_id = c.category_id','full');
               $this->db->join('sizes s','p.size_id = s.size_id','full');
                $this->db->join('brand b','p.brand_id = b.brand_id','full');

            $result=$this->db->get()->result();

    return $result;
}

Что я хочу/я хочу показать на своем веб-сайте

+-----+--------------+--------------+-------------------+
| ID  | Product Code | Description  | Stocks Quantity   |
+-----+--------------+--------------+-------------------+
| 001 |   12345      | sample       |  12               |
| 002 |   23456      |  try         |  15               |
+-----+--------------+--------------+-------------------+

В моей таблице базы данных

+-----+--------------+--------------+
| ID  | Product_Id   | Quantity     |
+-----+--------------+--------------+
| 1   |   1          |     10       | 
| 2   |   3          |     7        |
+-----+--------------+--------------+
| 3   |   1          |     2        | 
| 4   |   3          |     8        |
+-----+--------------+--------------+

Надеюсь, вы поможете парням.

Теги:
codeigniter

2 ответа

0
Лучший ответ

Используйте SUM() и группу:

$this->db->select('p.*,c.category_name,s.size,b.brand_name,SUM(t.quantity) as total_quantity',false)
               ->from('stocks t')
               ->join('products p','p.prod_id = t.product_id','full')
               ->join('category c','p.category_id = c.category_id','full')
               ->join('sizes s','p.size_id = s.size_id','full')
               ->join('brand b','p.brand_id = b.brand_id','full')
               ->group_by('t.product_id');
          $result=$this->db->get()->result();
0

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

$this->load->model('database');

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

$this->load->library('database'); 
  • 0
    моя модель называется база данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню