Php 将列数据动态转换为列名的mySQL查询
我正在尝试从ZenCart数据库创建甜甜圈订单的“运行表”。我读了十几条贴在网上的问题,想找到[杰夫·李对问题的回答]:。由于我使用的是MySQL,我想我需要生成一个动态查询,因为我的“ProductName”数据发生了变化 我已经编写了以下代码,生成了一个结构类似于示例数据库表的HTML表,但我不知道如何将他的解决方案合并到我的代码中,因为我不是从数据库表开始,而是从查询结果集开始 为了使用Jeff的解决方案,我将尝试从现有查询创建一个数据库表,但我认为首选的方法是将他的代码合并到我的查询中,我只是不知道如何 我使用的是PHP/5.6.11和MySQL/5.6.25Php 将列数据动态转换为列名的mySQL查询,php,mysql,database,Php,Mysql,Database,我正在尝试从ZenCart数据库创建甜甜圈订单的“运行表”。我读了十几条贴在网上的问题,想找到[杰夫·李对问题的回答]:。由于我使用的是MySQL,我想我需要生成一个动态查询,因为我的“ProductName”数据发生了变化 我已经编写了以下代码,生成了一个结构类似于示例数据库表的HTML表,但我不知道如何将他的解决方案合并到我的代码中,因为我不是从数据库表开始,而是从查询结果集开始 为了使用Jeff的解决方案,我将尝试从现有查询创建一个数据库表,但我认为首选的方法是将他的代码合并到我的查询中,
<?php
echo 'Attempt connection to the [donutsdb] database';
print '<br />';
require("includes/connect2donutsdb.php");
?>
<?php
//this script will query the 'orders' and 'orders_products' tables
//and combine the information based on the 'orders_id' field
//I added aliases to improve the query readability
try {
echo '[donutsdb]';
print '<br />';
$query = "
SELECT
o.orders_id AS 'O_OID', o.customers_name AS 'O_CName',
p.products_name AS 'P_PName', p.products_quantity AS 'P_PQuant'
FROM
orders AS o
INNER JOIN orders_products AS p
ON o.orders_id=p.orders_id
";
//first pass just gets the column names
print "<table> \n";
$result = $dbh->query($query);
//return only the first row (we only need field names)
$row = $result->fetch(PDO::FETCH_ASSOC);
print " <tr> \n";
foreach ($row as $field => $value){
print " <th>$field</th> \n";
} // end foreach
print " </tr> \n";
//second query gets the data
$data = $dbh->query($query);
$data->setFetchMode(PDO::FETCH_ASSOC);
foreach($data as $row){
print " <tr> \n";
foreach ($row as $name=>$value){
print " <td>$value</td> \n";
} // end field loop
print " </tr> \n";
} // end record loop
print "</table> \n";
print '<br />';
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
} // end try
?>
我努力实现的目标是:
O_OID | O_CName | Glazed | Bavarian Cream | Chocolate Dipped | Donut Holes | Peanut Butter | Blueberry
1 | mark | 12 | 0 | 0 | 0 | 0 | 0
2 | John | 8 | 4 | 0 | 0 | 0 | 0
3 | mark | 0 | 0 | 12 | 0 | 0 | 0
4 | Kevin | 0 | 0 | 0 | 10 | 1 | 2
您需要一个交叉表查询。也许本教程会有所帮助:@Jeff,谢谢你的反馈。我现在正在看这篇文章。但是,我想我需要使用他的第二篇文章,因为列的数量需要是动态的。最好用PHP而不是SQL进行转换。简单地说,获取所需的行,然后使用php将这些行转换为表所需的格式,即将每个行值转换为不同的列。更有效的方法是Ikos,我编写了一个查询,返回执行转换所需的信息,但我不确定如何使用PHP将行转换为列标题。我一直在学习,因为他的多值解决方案似乎就是我想要的,但我不知道如何将他的查询输出为HTML,或者如何在查询结果集中使用PHP在HTML页面上显示信息。你需要一个交叉表查询。也许本教程会有所帮助:@Jeff,谢谢你的反馈。我现在正在看这篇文章。但是,我想我需要使用他的第二篇文章,因为列的数量需要是动态的。最好用PHP而不是SQL进行转换。简单地说,获取所需的行,然后使用php将这些行转换为表所需的格式,即将每个行值转换为不同的列。更有效的方法是Ikos,我编写了一个查询,返回执行转换所需的信息,但我不确定如何使用PHP将行转换为列标题。我一直在学习,因为他的多值解决方案似乎就是我要寻找的,但我不知道如何将他的查询输出为HTML,或者如何在我的查询结果集中使用PHP在HTML页面上显示信息。
O_OID | O_CName | Glazed | Bavarian Cream | Chocolate Dipped | Donut Holes | Peanut Butter | Blueberry
1 | mark | 12 | 0 | 0 | 0 | 0 | 0
2 | John | 8 | 4 | 0 | 0 | 0 | 0
3 | mark | 0 | 0 | 12 | 0 | 0 | 0
4 | Kevin | 0 | 0 | 0 | 10 | 1 | 2