Подведение итогов из таблицы БД - PullRequest
1 голос
/ 30 марта 2019

У меня есть такая таблица:

id  |  name  | quantity | price   
================================
1   | milk   |     3    |   3.5
-------------------------------
2   | jam    |     2    |   1.45
--------------------------------
3   | jam    |     1    |   1.45
--------------------------------
4   | milk   |     6    |   3.5
-------------------------------

Мне нужно напечатать итоговые результаты, например:

молоко - количество: 9 - цена: 3,5 - сумма: 31,5

джем - количество: 3 - цена: 1,45 - сумма: 4,35

НЕ НРАВИТСЯ ЭТО:

молоко - количество: 3 - цена: 3,5 - сумма: 10,5

джем - количество: 2 - цена: 1,45 - сумма: 2,9

джем - количество: 1 - цена: 3,5 - сумма: 1,45

молоко - количество: 6 - цена: 3,5 - сумма: 21

Вот мой код, но он дает мне не то, что я хочу:


  $conn=mysqli_connect('localhost','root','','shop') or die ("Fail");
  $sql="select *  from products";
  $result=mysqli_query($conn, $sql);
  while ($role=mysqli_fetch_array($result)){
        extract ($role);
         if ($quantity>0) {
    echo " $name - Price: $price - Quantity: $quantity -  Sum is: ".round($quantity*$price,2)."<br>";
          }  
           else {
               $m[$i]="$name - Price: $price <br>";
               $i++;
           }
  }

Помогите мне решить, пожалуйста. Спасибо:)

Ответы [ 4 ]

0 голосов
/ 31 марта 2019

Можете ли вы решить эту проблему только с помощью SQL

select 
  name, 
  sum(quantity) quantity , price, 
  ROUND(sum(price*quantity),2) as Sum
from 
   products
group by name;

Результат:

name                 quantity                          price        Sum                 
-------------------- --------------------------------- ------------ ------------------- 
jam                  3                                 1.45         4.35                
milk                 9                                 3.5          31.5                

Если вы хотите получить результат вместе:

select 
   concat(a. name, ' - quantity: ', a.quantity, ' - price: ',  a.price, ' - Sum: ', a.Sum ) resultado
from (
select 
   name, 
   sum(quantity) quantity , price, 
   ROUND(sum(price*quantity),2) as Sum
from 
   products
group by name ) a;

Результат:

resultado                                                                                                           
------------------------------------------------------------------------------------------------------------------- 
jam - quantity: 3 - price: 1.45 - Sum: 4.35                                                                         
milk - quantity: 9 - price: 3.5 - Sum: 31.50 

После этого вы можете использовать код PHP, чтобы поместить результат на страницу.

Я проверял эти коды SQL.

Надеюсь, это поможет

0 голосов
/ 30 марта 2019

Вы можете попытаться изменить свой код следующим образом:

$conn=mysqli_connect('localhost:3310','root','','shop') or die ("Fail");
$sql="select name,sum(quantity) quantity,price,sum(quantity)*price sumAmount  from products group by name,price";
$uspv=mysqli_query($conn, $sql);
$i=1;

while ($uspm=mysqli_fetch_array($uspv)){
    extract ($uspm);
    if ($quantity>0) {
        echo " $name - Price: $price - Quantity: $quantity -  Sum is: $sumAmount <br>";
    }  
    else {
        $m[$i]="$name - Price: $price <br>";
        $i++;
    }
} 
0 голосов
/ 30 марта 2019

Вы можете сделать это, используя CONCAT, GROUP BY, ORDER BY, больше не нужно использовать логику PHP

SELECT 
CONCAT(
 name,"- Quantity :- ",
SUM(`quantity`),"- Price :- ",
price,"- Sum :-", 
SUM(quantity*price)) AS result
FROM grocery GROUP BY name,price ORDER BY name ASC

Результат: enter image description here -

Phpmyadmin: -

enter image description here

Рабочий код для PHP: -

$conn = mysqli_connect('localhost','root','','DBNAME') or die ("Fail");
$sql  = 'SELECT CONCAT( name,"- Quantity :- ",SUM(`quantity`),"- Price :- ",price,"- Sum :-", SUM(quantity*price))  AS result FROM grocery GROUP BY name,price ORDER BY name ASC';

$result = $conn->query($sql);
$rows   = array();

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $rows[] = $row;
    }
}

печать с использованием массива: -

echo '<pre>';
print_r($rows);

Результат: -

Array
(
 [0] => Array
    (
        [result] => jam- Quantity :- 3- Price :- 1.45- Sum :-4.35
    )

 [1] => Array
    (
        [result] => milk- Quantity :- 9- Price :- 3.50- Sum :-31.50
    )

)
0 голосов
/ 30 марта 2019

Вы можете сделать это по запросу mysql.

select *,sum(quantity) as total_quantity, round(sum(quantity*price),2) as total_price from products group by name

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