【问题标题】:How to select all orders from a specific customer using PHP and MySQL?如何使用 PHP 和 MySQL 选择来自特定客户的所有订单?
【发布时间】:2018-01-14 02:51:30
【问题描述】:

我在尝试选择访问网站的给定客户的所有订单并通过表格将它们显示在屏幕上时遇到问题。问题是正在返回的数组的订单值增加了三倍(每个订单出现 3 次而不是 1 次)。

$query = "SELECT orders.orderID, orders.date, products.name, products.price
   FROM ((orders
   INNER JOIN customers ON orders.userID = ?)
   INNER JOIN products ON orders.productID = products.productID)";

   $stm = $pdo->prepare($query);
   $stm->execute([$_SESSION['id']]); // The ID of the customer using the website
   $orders_array = $stm->fetchAll(PDO::FETCH_ASSOC);

我的数据库有一个客户表、一个产品表和一个订单表。 我希望关联数组具有订单 ID、产品名称、订单日期和价格,实际上,所有这些都将被返回。但是,每个订单都会选择 3 次。 我在互联网上搜索过这样的例子,但我找不到任何适合我想要的例子。有谁知道为什么值是原来的三倍

【问题讨论】:

  • 注意:试着改掉在一次性变量中声明 SQL 语句的习惯,这些变量只使用一次。在将查询直接提供给函数的情况下,跟踪代码要容易得多,并且不再有可能搞砸并发送 $sql3 而不是视觉上相似的 $sql8

标签: php mysql database pdo


【解决方案1】:

您的JOIN 不正确。 ON 子句需要关联两个表中的列。

由于您没有从 customers 表中选择任何内容,因此您在查询中根本不需要它。

SELECT orders.orderID, orders.date, products.name, products.price
FROM orders
INNER JOIN products ON orders.productID = products.productID
WHERE orders.userID = ?

如果您确实想要包含客户信息,则应该是:

SELECT customer.name, orders.orderID, orders.date, products.name, products.price
FROM orders
INNER JOIN customer ON order.userID = customer.userID
INNER JOIN products ON orders.productID = products.productID
WHERE customer.userID = ?

【讨论】:

  • 谢谢。这解决了我的问题。我的查询结构似乎很糟糕。
【解决方案2】:

从客户中选择 * 由 Nama_Customer 订购;

从客户中选择 * 按 Nama_Customer DESC 订购;

从 Pasok 中选择 * 由 Jumlah_Pasok 订购;

从 Pasok 中选择 * 由 Jumlah_Pasok DESC 订购;

从供应商处选择 * WHERE Nama_Supplier NOT LIKE '%tron';

从客户中选择 * 在哪里 Kode_Customer='J-001' 或 Kode_Customer='B-002';

从客户中选择 * WHERE Kode_Customer IN ('J-001','B-002');

从客户中选择 Nama_Customer WHERE Kode_Customer IN ('J-001','B-002') 由 Nama_Customer 订购;

【讨论】:

  • 请您解释一下您的解决方案以及您做了什么?
猜你喜欢
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2023-03-05
  • 2021-09-20
  • 2020-07-04
  • 2012-08-05
相关资源
最近更新 更多