对于我个人来说,这是一个难以解决的问题
我的困境是:
我的数据库中有3个InnoDB表名为" order_detail"," orders"," billing"具有以下结构:
表" order_detail"看起来像这样:
•orderid(外键指向名为&#34的表中的序列; order")
•productid(外键指向名为&#34的产品系列中的序列;产品")
•quatity(INT型)
•价格(类型FLOAT)
表"命令"看起来像这样:
•serial(主键,auto_increment)
•日期(日期类型)
•customerid(类型为INT(11))(外键指向名为&#34的表中的序列;计费")
•总数(类型FLOAT)
表"结算"看起来像这样:
•serial(主键,auto_increment)
•名称(类型VARCHAR(25))
•userid(类型VARCHAR(25))
我有一个PHP文件,目的是简单地打印出所下订单的描述,例如:
订单ID |产品编号|金额|数量|总计|订购日期
现在,我只想使用userid,调用我的数据库(只有" billings"表),并且能够从"命令"中获取序列号,日期和总数。从他们开始,从" order_detail"获得产品,数量和价格。表
现在,我的非工作代码如下所示:
<?php
require("includes/config.php");
$users_query=mysql_query("SELECT * FROM billing WHERE userid='$username'");
$row=mysql_fetch_array($users_query);
?>
<table border="0" cellpadding="5px" cellspacing="1px" style="font-family:Verdana, Geneva, sans-serif; font-size:11px; background-color:#E1E1E1" width="100%">
<?php {
echo '<tr bgcolor="#FFFFFF" style="font-weight:bold"><td>Order ID</td><td>Product ID</td><td>Amount</td><td>Quantity</td><td>Total</td><td>Date Ordered</td></tr>';
?>
<tr bgcolor="#FFFFFF">
<td><?php echo $row['serial']; ?></td>
<td><?php echo $row['productid']; ?></td>
<td><?php echo $row['price']; ?></td>
<td><?php echo $row['quantity']; ?></td>
<td><?php echo $row['total']; ?></td>
<td><?php echo $row['date']; ?></td>
</tr>
<?php } ?>
</table>
(如何)我可以检索所提到的列,而无需单独调用&#34; order_details&#34;和&#34;命令&#34;表?当我检查phpMyAdmin时,InnoDB外键链接似乎工作正常。非常感谢提前!
答案 0 :(得分:1)
只能使用ORM访问外部数据。他们可以检查数据库结构并挖掘您需要的数据。在这种情况下,他们将为您处理查询。
但我想你想要/需要手工处理你的数据。
您可以通过联合查询来实现此目的,例如:
SELECT o.serial AS serial, d.productid AS productid, d.price AS price, d.quantity AS quantity, o.total AS total, o.date AS date
FROM order_detail d LEFT JOIN orders o ON o.serial = d.orderid LEFT JOIN billing b ON b.serial = o.customerid
WHERE b.userid = '$username';
顺便说一下,不应该在DB中存储可以动态计算的值(例如:order.total列,它是相关价格和数量的SUM())。
我个人认为,你不应该使用像这样的手工制作的查询。它会向您展示SQL注入,数据格式化/输入问题以及此类问题。
答案 1 :(得分:1)
ORDER_DETAILS(表)
订单表
结算表
以下是需要对数据库表架构进行的一些更改
查询应如下所示:
select
b.serials as serial, b.user_id as user_id, b.serial as serial_id, o.product_id as product_id,
od.price as price, od.quantity as quantity, o.total as total
from billings b
left join orders o
on o.order_id = b.order_id
left join order_details od
on od.order_id = o.order_id
where b.user_id = '.$userid.';`