在 MySQL 中,交叉表查询(Cross-Tab Query)也被称为分组报表查询,它可以将一个表按照指定的字段进行分组,并将每个分组中的数据进行交叉排列,生成一个类似于电子表格的结果集。

假设我们有一个订单表 orders,包含 order_id(订单 ID)、customer_id(客户 ID)、order_date(订单日期)和 total_price(订单总价)字段。我们想要查询每个客户的订单总价,按照订单日期进行分组。可以使用以下 SQL 查询语句来实现:

SELECT customer_id,
       order_date,
       SUM(total_price) AS total_price
FROM orders
GROUP BY customer_id,
         order_date;

上述查询语句使用了 GROUP BY 子句按照 customer_idorder_date 进行分组,并使用 SUM 函数计算每个分组的总价格。结果集将包含每个客户的订单日期和对应的总价格。

在 PHP 中,可以使用 MySQL 扩展来执行上述查询语句,并将结果集处理为二维数组。以下是一个简单的示例代码:

<?php
// 连接数据库
$link = mysqli_connect("localhost", "username", "password", "database");

// 检查连接是否成功
if (!$link) {
    die("连接失败: ". mysqli_connect_error());
}

// 准备查询语句
$sql = "SELECT customer_id,
              order_date,
              SUM(total_price) AS total_price
       FROM orders
       GROUP BY customer_id,
                order_date";

// 执行查询语句
$result = mysqli_query($link, $sql);

// 检查查询是否成功
if (!$result) {
    die("查询失败: ". mysqli_error($link));
}

// 初始化二维数组用于存储结果
$resultData = array();

// 遍历结果集并将数据存储到二维数组中
while ($row = mysqli_fetch_assoc($result)) {
    $customer_id = $row['customer_id'];
    $order_date = $row['order_date'];
    $total_price = $row['total_price'];

    if (!isset($resultData[$customer_id])) {
        $resultData[$customer_id] = array();
    }

    $resultData[$customer_id][$order_date] = $total_price;
}

// 关闭结果集和连接
mysqli_free_result($result);
mysqli_close($link);

// 打印结果集
foreach ($resultData as $customer => $orders) {
    foreach ($orders as $order => $price) {
        echo "客户: {$customer}, 订单日期: {$order}, 订单总价: {$price}\n";
    }
}
?>

上述代码首先连接到 MySQL 数据库,然后执行查询语句。通过遍历结果集并将数据存储到二维数组中,实现了交叉表查询的功能。最后,遍历数组并打印出每个客户的订单信息。

请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体的需求进行更多的处理和错误检查。