Чтобы найти СУММУ каждого товара в разных магазинах / складах с помощью php mysql

#php #mysql

#php #mysql

Вопрос:

Я хочу, чтобы служба поддержки нашла общее количество каждого товара в 2 разных магазинах, как вы можете видеть, прикрепив две таблицы ниже, используя Php.

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

Это результат, который я ожидал

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

        <table class="table" id="manageStockStatus">
                <thead>
                    <tr>

                        <th>Product Name</th>


                        <th>Qty-office</th>
                        <th>Qty-Yard</th>
                        <th>T-Qyt</th>
                        <th>Size/Type</th>

                    </tr>
                <?php

    $sql = "SELECT  SUM(quantity) AS Tq, (SELECT product_name 
 from product where stock.product_id=product_id) as pname FROM `stock` GROUP BY product_id ";
                 $result = $connect->query($sql);

               while($row = $result->fetch_array()) {
               $Productname=$row['pname'];
               $Tqnty=$row['Tq'];
                // $Tqnty=$row['Tq'];
                // $office=$row[];
                // $yard=$row['yard'];

               ?>
                </thead>

    <td><?php echo $Productname;?> </td>
    <td><!-- <?php echo $office;?> --></td>
    <td><!-- <?php echo $yard;?> --></td>
    <td><span class="badge"><?php echo $Tqnty; ?></span></td>
    <td></td>

    </tr> 

     <?php }?>
    </table>
    <!-- /table -->

</div> <!-- /panel-body -->
</div> <!-- /panel -->      
</div> <!-- /col-md-12 -->
  

Ответ №1:

Попробуйте использовать левое соединение и выполнить group by stock.product_id,store :

 SELECT  stock.product_id as id,product_name as pname,store,SUM(quantity) AS Tq
FROM `stock` left join product on stock.product_id=product.product_id
group by stock.product_id,store
  

Таким образом, в вашем цикле while вы можете иметь:

        while($row = $result->fetch_array()) {
           $Productname=$row['pname'];
           $Tqnty=$row['Tq'];
           $office=$row['store']; 
       ?>
  

Редактировать

Тогда вы можете использовать ПРИМЕР, подобный этому:

 SELECT  stock.product_id as id,product.product_name as pname,
        sum(case 
                when store=1 then quantity
                else 0
            end) as office,
        sum(case 
                when store=2 then quantity
                else 0
            end) as yard
FROM `stock`  left join product on stock.product_id=product.product_id
group by stock.product_id,product.pname
  

Таким образом, в вашем цикле while вы можете иметь:

        while($row = $result->fetch_array()) {
           $Productname=$row['pname'];
           $yard=$row['yard']; 
           $office=$row['office']; 
           $Tqnty=$office $yard;
       ?>
  

Комментарии:

1. Спасибо @nacho, но как я могу отобразить количество в офисе и количество во дворе? смотрите второй скриншот, прикрепленный выше

2. он выдает идентификатор магазина, а не количество названия продукта,, можем ли мы отобразить количество продукта в офисе и на складе, и если количество отсутствует, оно может отображать 0 относительно названия продукта? @nacho

3. основная концепция здесь заключается в том, чтобы иметь количество офиса и двора и общее количество (офис двор) относительно products_id

4. Откуда берется Q Yard?

5. Магазин = 1 — это офис, а магазин = 2 — это двор