Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将列数据动态转换为列名的mySQL查询_Php_Mysql_Database - Fatal编程技术网

Php 将列数据动态转换为列名的mySQL查询

Php 将列数据动态转换为列名的mySQL查询,php,mysql,database,Php,Mysql,Database,我正在尝试从ZenCart数据库创建甜甜圈订单的“运行表”。我读了十几条贴在网上的问题,想找到[杰夫·李对问题的回答]:。由于我使用的是MySQL,我想我需要生成一个动态查询,因为我的“ProductName”数据发生了变化 我已经编写了以下代码,生成了一个结构类似于示例数据库表的HTML表,但我不知道如何将他的解决方案合并到我的代码中,因为我不是从数据库表开始,而是从查询结果集开始 为了使用Jeff的解决方案,我将尝试从现有查询创建一个数据库表,但我认为首选的方法是将他的代码合并到我的查询中,

我正在尝试从ZenCart数据库创建甜甜圈订单的“运行表”。我读了十几条贴在网上的问题,想找到[杰夫·李对问题的回答]:。由于我使用的是MySQL,我想我需要生成一个动态查询,因为我的“ProductName”数据发生了变化

我已经编写了以下代码,生成了一个结构类似于示例数据库表的HTML表,但我不知道如何将他的解决方案合并到我的代码中,因为我不是从数据库表开始,而是从查询结果集开始

为了使用Jeff的解决方案,我将尝试从现有查询创建一个数据库表,但我认为首选的方法是将他的代码合并到我的查询中,我只是不知道如何

我使用的是PHP/5.6.11和MySQL/5.6.25

<?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