这对我个人来说是一个很难破解的问题
我的困境是:
我的数据库中有3个InnoDB表,名为"order_detail","orders","billing",结构如下:
表"order_detail"看起来像这样:
•orderid(指向表"orders"序列的外键)
•productid(指向"products"表中序列号的外键)
•质量(INT类型)
•price (type FLOAT)
表"orders"看起来像这样:
•serial (primary key, auto_increment)
•日期(类型为date)
•customerid (type INT(11))(指向"billing"表中序列号的外键)
•total (type FLOAT)
表"billing"看起来像这样:
•serial (primary key, auto_increment)
•name (type VARCHAR(25))
•userid (type VARCHAR(25))
我有一个PHP文件,目的是简单地打印出订单的描述,例如:
订单ID |产品ID |金额|数量|总数|订购日期
现在,我只想使用userid,调用我的数据库(只有"billings"表),并能够从"订单"中获得序列号、日期和总数,并从"order_detail"表中获得productid、数量和价格。
现在,我的非工作代码看起来像这样:
<?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>
(如何)在不单独调用"order_details"one_answers"order"表的情况下检索提到的列?当我检查phpMyAdmin时,InnoDB外键链接似乎工作得很好。提前感谢!
访问外部数据只能使用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。(相关价格和数量的SUM())
在我看来,你不应该使用这样的手工查询。它使您暴露于SQL注入,数据格式化/输入问题和诸如此类的混乱。
order_details(table)
- order_detaild_id(主键)
- order_id(fkey from orders table)
- 数量价格
订单表
- order_id
- prod_id(fkey from products)
- userid(fkey from billing) 总数
计费表
- billing_id (prmiary键)
- 串行 <
- 名称/gh>
- userid
- orderid
下面是需要对数据库表模式进行的一些更改
查询应该像这样:
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.';`