You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从两个不同表查询数据并合并输出的PHP技术问题

嘿,我来帮你搞定这个跨表取数合并展示的需求!咱们一步步来,附上手写的代码示例,保证能实现按品牌作为表头展示指定字段的效果:

实现步骤与代码示例

1. 先理清楚场景假设

我默认你有两个产品相关的数据库表(比如product_table_a和product_table_b),它们都包含这些核心字段:brand_name(品牌名)、product_name、product_image、amount、buy、sell。如果两个表的字段名不一致,记得用SQL别名统一哦。

2. 核心实现思路

  • 先通过SQL合并两个表的查询结果(效率更高),或者PHP数组合并(适合表结构差异大的情况)
  • 把合并后的数据按品牌分组,这样每个品牌下对应一组产品
  • 遍历分组数据,输出HTML表格:每个品牌先做表头,再展示该品牌下的所有产品

3. 完整PHP代码

<?php
// 1. 数据库连接(推荐用PDO,安全且兼容性好)
$dsn = 'mysql:host=你的数据库主机;dbname=你的数据库名;charset=utf8mb4';
$dbUser = '数据库用户名';
$dbPwd = '数据库密码';

try {
    $pdo = new PDO($dsn, $dbUser, $dbPwd);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("数据库连接失败:" . $e->getMessage());
}

// 2. 合并两个表的查询(字段名不一致的话,用AS别名统一)
$sql = "
    SELECT brand_name, product_name, product_image, amount, buy, sell FROM product_table_a
    UNION ALL
    SELECT brand_name, product_name, product_image, amount, buy, sell FROM product_table_b
";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$allProducts = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 3. 按品牌分组整理数据
$productsByBrand = [];
foreach ($allProducts as $product) {
    $brand = $product['brand_name'];
    // 初始化品牌分组数组
    if (!isset($productsByBrand[$brand])) {
        $productsByBrand[$brand] = [];
    }
    $productsByBrand[$brand][] = $product;
}

// 4. 输出合并后的表格
echo '<table border="1" cellpadding="8" cellspacing="0" style="width: 100%; border-collapse: collapse;">';
foreach ($productsByBrand as $brand => $products) {
    // 品牌作为大表头
    echo '<tr>';
    echo '<th colspan="5" style="background-color: #f5f5f5; text-align: left;">' . htmlspecialchars($brand) . '</th>';
    echo '</tr>';
    // 字段小表头
    echo '<tr style="background-color: #eee;">';
    echo '<th>商品名称</th>';
    echo '<th>商品图片</th>';
    echo '<th>库存</th>';
    echo '<th>买入价</th>';
    echo '<th>卖出价</th>';
    echo '</tr>';
    // 遍历该品牌下的所有产品
    foreach ($products as $prod) {
        echo '<tr>';
        echo '<td>' . htmlspecialchars($prod['product_name']) . '</td>';
        echo '<td><img src="' . htmlspecialchars($prod['product_image']) . '" alt="' . htmlspecialchars($prod['product_name']) . '" style="width: 80px; height: auto;"></td>';
        echo '<td>' . htmlspecialchars($prod['amount']) . '</td>';
        echo '<td>' . htmlspecialchars($prod['buy']) . '</td>';
        echo '<td>' . htmlspecialchars($prod['sell']) . '</td>';
        echo '</tr>';
    }
}
echo '</table>';
?>

额外注意事项

  • 如果两个表结构差异大,没法用UNION ALL,可以分别查询两个表的数据,再用array_merge()合并数组,后续分组逻辑不变
  • 一定要用htmlspecialchars()转义输出内容,防止XSS攻击
  • 可以根据需求调整表格的CSS样式,让展示更美观

内容的提问来源于stack exchange,提问作者Assad Rajab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:34:49