如何用单SQL语句+PHP从MySQL多表查询并展示指定用户交易详情
解决方案
1. 关联查询的SQL语句
通过JOIN关联三个表,用GROUP_CONCAT把同一交易下的产品合并成“产品ID.产品名称”格式的字符串,SQL语句如下:
SELECT t.transaction_id, GROUP_CONCAT(CONCAT(p.product_id, '.', p.product_name) SEPARATOR ', ') AS product_list FROM `transaction` t INNER JOIN transaction_details td ON t.transaction_id = td.transaction_id INNER JOIN products p ON td.product_id = p.product_id WHERE t.user_id = 4 GROUP BY t.transaction_id;
- 用
INNER JOIN保证只返回有对应交易明细和产品的记录,若需包含无明细的交易,可替换为LEFT JOIN GROUP_CONCAT中的SEPARATOR可根据需求调整分隔符,比如换行符\n或分号;
2. PHP 展示表格代码
以下是用mysqli扩展实现的示例代码,完成数据库连接、查询执行和表格输出:
<?php // 数据库连接参数 $host = 'localhost'; $dbname = '你的数据库名'; $username = '数据库用户名'; $password = '数据库密码'; // 创建连接 $conn = new mysqli($host, $username, $password, $dbname); // 检查连接状态 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 执行SQL查询 $sql = "SELECT t.transaction_id, GROUP_CONCAT(CONCAT(p.product_id, '.', p.product_name) SEPARATOR ', ') AS product_list FROM `transaction` t INNER JOIN transaction_details td ON t.transaction_id = td.transaction_id INNER JOIN products p ON td.product_id = p.product_id WHERE t.user_id = 4 GROUP BY t.transaction_id"; $result = $conn->query($sql); // 输出表格 if ($result->num_rows > 0) { echo "<table border='1' cellpadding='8' cellspacing='0'> <tr> <th>交易ID</th> <th>产品信息</th> </tr>"; // 循环输出每条交易数据 while($row = $result->fetch_assoc()) { echo "<tr> <td>" . htmlspecialchars($row["transaction_id"]) . "</td> <td>" . htmlspecialchars($row["product_list"]) . "</td> </tr>"; } echo "</table>"; } else { echo "未找到用户ID为4的交易记录"; } // 关闭数据库连接 $conn->close(); ?>
- 注意
transaction是MySQL关键字,需用反引号`包裹表名 - 用
htmlspecialchars避免XSS风险,若需要更美观的表格样式,可添加自定义CSS - 若使用PDO扩展,只需调整数据库连接和查询执行的逻辑,核心业务代码保持一致
内容的提问来源于stack exchange,提问作者Iceswagz
相关产品推荐
相关产品推荐

