创建统计页面。 Php
Creating Stats page. Php
我正在尝试在我的网站中创建一个统计页面来显示属于交易者的产品、每件产品的销售量以及已售出的特定产品的总价。
我的代码目前创建了一个 while 循环,但是当它循环遍历数据库时,它多次显示项目(而不是每个产品只显示一次)并且未设置每个产品的销售总量对于某个产品,它显示的是每件产品的销售总额。
这是我的 select 声明:
$querytest = "SELECT * FROM PRODUCT
INNER JOIN TRADER
ON PRODUCT.Stall_ID=TRADER.Stall_ID
INNER JOIN ORDER_ITEMS
ON PRODUCT.Product_ID=ORDER_ITEMS.Product_ID
WHERE TRADER.Username='". $_SESSION['Username'] ."'";
$testresult = oci_parse($connection, $querytest);
oci_execute($testresult)
这是我的 while 循环。我希望它只输出一次数据库中的产品。但是它输出了很多次。
while($row = oci_fetch_assoc($testresult)) {
$DName = $row ['NAME'];
$DProdesc = $row ['PRODUCT_DESC'];
$DIMAGEID = $row['IMAGEID'];
$DPrice = $row['PRICE'];
$price = $row['PRICE'];
$prodord = $row['PRODUCTQUANTITY'];
$totalprodord = $totalprodord + $prodord;
$totalprodprice = $totalprodord * $Dprice;
$quantity = $row['QUANTITY'];
$subtotal = ($price * $quantity);
$total = $total + $subtotal;
$stock = $stock + $quantity;
echo '<td> <img src="' . $DIMAGEID. '" height="50" width="50"/></td>';
echo '<td>' .$DName. '</td>';
echo '<td>' .$DProdesc. '</td>';
echo '<td>' .$totalprodord. '</td>';
echo '<td>£ ' .$DPrice. '</td>';
echo '<td>£ ' . $totalprodprice . '</td>';'</tr>';
}
ob_flush();
?>
我的数据库表:
CREATE TABLE TRADER(
Trader_ID number (5) NOT NULL,
Trader_Name varchar2 (20),
FirstName varchar2 (10) NOT NULL,
LastName varchar2 (10) NOT NULL,
DOB date NOT NULL,
Username varchar2 (15) NOT NULL,
Password varchar2 (32) NOT NULL,
Phone varchar2 (10),
Email varchar2 (30) NOT NULL,
Stall_ID number (5) references STALL(Stall_ID),
Primary Key (Trader_ID));
CREATE TABLE PRODUCT(
Product_ID number (5) NOT NULL,
Name varchar2 (30) NOT NULL,
Product_Desc varchar2 (50),
ImageID varchar2 (35),
Price number(5,2) NOT NULL,
Quantity number (10) NOT NULL,
Stall_ID number (5) references STALL(Stall_ID),
Product_Type_ID number (5) references PRODUCT_TYPE(Product_Type_ID),
Primary Key (Product_ID));
CREATE TABLE ORDER_ITEMS(
Order_Items_ID number (5) NOT NULL,
TotalPrice number (5,2) NOT NULL,
ProductQuantity number (5) NOT NULL,
Day_ID number (5) references COLLECTION_DAY(Day_ID),
Time_ID number (5) references COLLECTION_TIME(Time_ID),
Customer_ID number (5) references CUSTOMER(Customer_ID),
Product_ID number (5) references PRODUCT(Product_ID),
Order_ID number (5) references CUSTOMER_ORDER(Order_ID),
Primary Key (Order_Items_ID));
谁能帮我正确显示统计数据?
谢谢
您需要在查询中对数字求和,或者您必须在代码中对数字求和并跳过相同的产品。你什么都不做。
尝试用这样的内容替换您的查询:
SELECT prod.product_id, prod.name,
prod.quality-sum(orders.quality) AS Stock_Left,
AVG(orders.price) AS Sold_price,
SUM(orders.price * orders.quality) AS Sold_Amount,
Sum(orders.quality) AS Total_Sold
FROM product prod INNER JOIN Order_Items orders
ON prod.prod_id = orders.prod_id
INNER JOIN trader
ON prod.stall_id = trader.stall_id
WHERE trader.Username='". $_SESSION['Username'] ."'"
您可以在循环中摆脱大部分计算。
我正在尝试在我的网站中创建一个统计页面来显示属于交易者的产品、每件产品的销售量以及已售出的特定产品的总价。
我的代码目前创建了一个 while 循环,但是当它循环遍历数据库时,它多次显示项目(而不是每个产品只显示一次)并且未设置每个产品的销售总量对于某个产品,它显示的是每件产品的销售总额。
这是我的 select 声明:
$querytest = "SELECT * FROM PRODUCT
INNER JOIN TRADER
ON PRODUCT.Stall_ID=TRADER.Stall_ID
INNER JOIN ORDER_ITEMS
ON PRODUCT.Product_ID=ORDER_ITEMS.Product_ID
WHERE TRADER.Username='". $_SESSION['Username'] ."'";
$testresult = oci_parse($connection, $querytest);
oci_execute($testresult)
这是我的 while 循环。我希望它只输出一次数据库中的产品。但是它输出了很多次。
while($row = oci_fetch_assoc($testresult)) {
$DName = $row ['NAME'];
$DProdesc = $row ['PRODUCT_DESC'];
$DIMAGEID = $row['IMAGEID'];
$DPrice = $row['PRICE'];
$price = $row['PRICE'];
$prodord = $row['PRODUCTQUANTITY'];
$totalprodord = $totalprodord + $prodord;
$totalprodprice = $totalprodord * $Dprice;
$quantity = $row['QUANTITY'];
$subtotal = ($price * $quantity);
$total = $total + $subtotal;
$stock = $stock + $quantity;
echo '<td> <img src="' . $DIMAGEID. '" height="50" width="50"/></td>';
echo '<td>' .$DName. '</td>';
echo '<td>' .$DProdesc. '</td>';
echo '<td>' .$totalprodord. '</td>';
echo '<td>£ ' .$DPrice. '</td>';
echo '<td>£ ' . $totalprodprice . '</td>';'</tr>';
}
ob_flush();
?>
我的数据库表:
CREATE TABLE TRADER(
Trader_ID number (5) NOT NULL,
Trader_Name varchar2 (20),
FirstName varchar2 (10) NOT NULL,
LastName varchar2 (10) NOT NULL,
DOB date NOT NULL,
Username varchar2 (15) NOT NULL,
Password varchar2 (32) NOT NULL,
Phone varchar2 (10),
Email varchar2 (30) NOT NULL,
Stall_ID number (5) references STALL(Stall_ID),
Primary Key (Trader_ID));
CREATE TABLE PRODUCT(
Product_ID number (5) NOT NULL,
Name varchar2 (30) NOT NULL,
Product_Desc varchar2 (50),
ImageID varchar2 (35),
Price number(5,2) NOT NULL,
Quantity number (10) NOT NULL,
Stall_ID number (5) references STALL(Stall_ID),
Product_Type_ID number (5) references PRODUCT_TYPE(Product_Type_ID),
Primary Key (Product_ID));
CREATE TABLE ORDER_ITEMS(
Order_Items_ID number (5) NOT NULL,
TotalPrice number (5,2) NOT NULL,
ProductQuantity number (5) NOT NULL,
Day_ID number (5) references COLLECTION_DAY(Day_ID),
Time_ID number (5) references COLLECTION_TIME(Time_ID),
Customer_ID number (5) references CUSTOMER(Customer_ID),
Product_ID number (5) references PRODUCT(Product_ID),
Order_ID number (5) references CUSTOMER_ORDER(Order_ID),
Primary Key (Order_Items_ID));
谁能帮我正确显示统计数据?
谢谢
您需要在查询中对数字求和,或者您必须在代码中对数字求和并跳过相同的产品。你什么都不做。
尝试用这样的内容替换您的查询:
SELECT prod.product_id, prod.name,
prod.quality-sum(orders.quality) AS Stock_Left,
AVG(orders.price) AS Sold_price,
SUM(orders.price * orders.quality) AS Sold_Amount,
Sum(orders.quality) AS Total_Sold
FROM product prod INNER JOIN Order_Items orders
ON prod.prod_id = orders.prod_id
INNER JOIN trader
ON prod.stall_id = trader.stall_id
WHERE trader.Username='". $_SESSION['Username'] ."'"
您可以在循环中摆脱大部分计算。