【问题标题】:Combine two MySQL tables in PDO and create CSV output在 PDO 中合并两个 MySQL 表并创建 CSV 输出
【发布时间】:2021-02-03 02:03:02
【问题描述】:

这里是新的。我会尽量把这个问题表述得尽可能清楚。

我正在构建一个订单数据库,在该数据库中我有两个表。

表 1(订单)有这些列:

id, name, datetime

表 2(订购的项目)包含以下列:

id, orderid, itemname, price

表2中的orderid是表1中的id

我需要运行一个 MySQL 查询,输出一个如下所示的数组:

orderid, datetime, name, itemname, price

这是我选择订单的方式:

$date1 = "2020-09-29"; //$_GET["date1"];
$date2 = "2020-09-30"; //$_GET["date2"];

include 'dbconfig.php';

$pdo = new PDO("mysql:charset=utf8mb4;host=$servername;dbname=$dbname", $username, $password);

$pdo = $pdo->prepare("SELECT id, name datetime FROM orders WHERE datetime BETWEEN :date1 AND :date2");

$pdo->execute(['date1'  =>  $date1,
               'date2'  =>  $date2]); 
 
while ($row = $pdo->fetch()) {
    $data[] = $row;
}

这就是我选择订单商品的方式:

$sql = "SELECT orderid, itemname, price FROM orderitems WHERE orderid=:id";

如何组合它们并让它们以我想要的方式导出数组?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    您已经可以在 SQL 中进行连接,只需将该 一个 查询发送到数据库,而不是一个用于订单的查询,然后一个用于订单详细信息的查询。这样快很多。该查询将是:

    SELECT o.id orderid,
           o.datetime,
           o.name,
           oi.itemname,
           oi.price
           FROM orders o
                INNER JOIN ordered oi
                           ON oi.orderid = o.id
           WHERE o.datetime >= :date1
                 AND o.datetime < :date2;
    

    并且不要将BETWEEN 用于时间戳范围。如果您的上限是 2020-09-30,您将只能获得 2020-09-30 00:00:00.000 的记录。但是例如,您会错过 2020-09-30 01:01:00.000。使用&lt; 比较上限和下一个天,即2020-10-01,作为值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2021-03-03
      相关资源
      最近更新 更多