【问题标题】:PHP PDO select with INNER JOIN使用 INNER JOIN 选择 PHP PDO
【发布时间】:2014-02-07 00:19:20
【问题描述】:

我正在尝试使用 INNER JOIN 对我的数据库进行 PHP PDO 调用。

我尝试做的三个连接如下:

KC_Orders -- Database Table Name
 --orderNumber -- Relation Field

KC_Payments -- Database Table Name
 --orderNumber -- Relation Field 

KC_OrderStatus -- Database Table Name
 --OrderNumber -- Relation Field 

我想从表格中获取更多信息,而不仅仅是订单号。

我对数据库的调用如下:

$sql = "SELECT * from `KC_Orders` INNER JOIN `KC_Payments` INNER JOIN `KC_OrderStatus`";
$ThreeRecentOrders = $db->query($sql);

然后在我的foreach 语句中,我有以下显示结果。

<?php foreach($ThreeRecentOrders as $order): ?>
   <?php $orderNumber = $order['orderNumber']; ?>
       <tr>
         <th><?php echo $orderNumber; ?></th>
         <th><?php echo $order['billingFName']; ?> <?php echo $order['billingLName']; ?></th>
         <th>$<?php echo number_format($order['order_total']/100,2); ?></th>
         <th><?php echo $order['statusID']; ?></th>
       </tr>
<?php endforeach; ?>

现在,一切正常但是我在系统中只有两个订单,这意味着到目前为止每个数据库中有两行。 3 database joins2 rows in each field 3x2=6 我在 foreach 的表中得到 6 个结果。它占用每一行并回显一个结果。这显然不是我的本意。我需要向数据库调用或 sql 添加什么来解决这个问题?

【问题讨论】:

  • 你加入什么?我希望看到像 ... INNER JOIN KC_Payments USING (orderNumber) ... 或类似的东西,你似乎没有加入任何外键索引。
  • 也许如果你添加ON 子句,如:SELECT * FROM KC_Orders o INNER JOIN KC_Payments p ON o.orderNumber = p.orderNumber ... ?

标签: php sql pdo


【解决方案1】:

您需要实际指定要加入的列

select * from kc_orders 
    inner join kc_payments 
        on kc_orders.orderNumber = kc_payments.order_number 
    inner join kc_orderStatus 
        on kc_orders.orderNumber = kc_orderStatus.orderNumber

【讨论】:

  • 这会在我重新加载页面后生成Invalid argument supplied for foreach()。这意味着呼叫没有返回任何内容?对吗?
  • 我猜当您输入正确的所有内容时它会起作用。不过谢谢!
猜你喜欢
  • 2015-10-22
  • 2012-02-03
  • 2015-11-29
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多