通过外键获取MySQL

时间:2014-05-06 15:41:09

标签: php mysql key fetch

对于我个人来说,这是一个难以解决的问题

我的困境是:

我的数据库中有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外键链接似乎工作正常。非常感谢提前!

2 个答案:

答案 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(表)

  • order_detaild_id(主键)
  • order_id(来自订单表的fkey)
  • 数量价格

订单表

  • ORDER_ID
  • prod_id(来自产品的fkey)
  • 日期
  • userid(来自结算的fkey)

结算表

  • billing_id(prmiary key)
  • 串行
  • 名称
  • 用户ID
  • 订单ID

以下是需要对数据库表架构进行的一些更改

查询应如下所示:

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.';`