我正在将POS软件迁移到基于Web的版本,在我想动态显示Sales产品之前,一切都进行得很好。
产品列表
销售表
我使用implode插入我的记录,爆炸后效果很好。
这里的问题是我想显示所有基于产品的销售,即从销售表中爆炸product_id并使用每个ID来获取产品名称。
还根据产品ID爆炸数量并将所有数量加在一起,并爆炸真实价格并显示价格等等。
我得到的不是我想要的
这就是我想要的
<table id="salestable" class="table table-bordered table-striped table-hover">
<thead>
<tr class="titlerow" role="row">
<th >Products</th>
<th >Sold</th>
<th >Cost</th>
<th >Income</th>
<th >Profit</th>
</tr>
</thead>
<tbody id="get_product">
<?php
try{
$query = $con->prepare("Select s.product_id, s.adjust_price, s.real_price, s.quantity, s.sales_date from tbl_sales s where s.status ='Paid' and s.store_id = '$store'");
$query->execute();
while($row = $query->fetch(PDO::FETCH_ASSOC)){
?>
<tr>
<td ><?php foreach(explode("|", $row['product_id']) as $pID){ get_product_by_id($con, $pID); } ?></td>
<td ><?php foreach(explode("|", $row['quantity']) as $qty){ echo $qty; } ?></td>
<td ><?php foreach(explode("|", $row['real_price']) as $cost){ echo $cost; } ?></td>
<td ><?php foreach(explode("|", $row['adjust_price']) as $income){ echo $income; } ?></td>
<td ><?php echo '2'; ?></td>
</tr><?php
}
} catch (PDOException $e){
$_SESSION['error'] = $e->getMessage();
$log = date('Y-m-d H:m:s').' '.$_SERVER['REQUEST_URI'].' '.$e->getMessage(). "\r\n";
file_put_contents('../errorlog.txt', $log, FILE_APPEND);
}
?> </tbody>
<tfoot>
<tr class="totalColumn">
<th >Products</th>
<th class="totalCol" >Sold</th>
<th class="totalCol" >Cost</th>
<th class="totalCol" >Income</th>
<th class="totalCol" >Profit</th>
</tr>
<tr class="footersearch">
<td colspan="8" ><input type="text" class="form-control" name="search_table" id="search_table" title="Type & hit enter to search the table" data-toggle="tooltip" placeholder="Type & hit enter to search the table" style="width:100%;"></td>
</tr>
</tfoot>
</table>
答案 0 :(得分:0)
以防万一归一化您对@Cid的评论,以扩大其含义。
如果要将销售或发票链接到客户,则需要“客户”表和“发票”表。如果您不想跟上客户信息,只需使用发票表即可。将出售的商品链接到发票的一种方法是使用一个称为ProductInInvoice的关系,如下所示。该伪代码不是有效的SQL,但您会明白的。
Products (
productId,
name,
description,
price,
...
);
Invoice (
invoiceId
);
ProductInInvoice (
productId,
invoiceId,
quantitySold
);
在这里,ProductInInvoice表中的productId
是Products表中的外键,而invoiceId
是Invoice表中的外键。
如果您有一个带有customerId
列的Customer表来存储客户信息,则可以将外键customerId
添加到引用该Customer表的Invoice表中。然后,您可以查询,通过在SELECT语句中连接表,不仅可以找到在该交易中出售的每件商品的数量,而且还可以找到购买这些物品的人。