通过外键获取MySQL



这对我个人来说是一个很难破解的问题

我的困境是:

我的数据库中有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.';`

相关内容

  • 没有找到相关文章

最新更新