【问题标题】:How to convert the query result from multiple columns to two columns?如何将查询结果从多列转换为两列?
【发布时间】:2013-07-16 03:41:22
【问题描述】:

我正在使用 Google Charts 绘制饼图。为了绘制它,需要两列格式的数据。绘制谷歌图表的代码在这里没有给出,因为它是未来实现的一部分。为了从数据库中获取数据,我编写了以下代码:

<?php
    $con=mysql_connect("localhost","XYZ","pqrs") or die("Failed to connect with database!!!!");
    mysql_select_db("LMN", $con); 

    $sql  =" SELECT COUNT(*) 'carried_out', SUM(transaction_status = 'success') success, ";
    $sql .=" SUM(transaction_status = 'inprocess') inprocess, SUM(transaction_status = 'fail') fail, ";
    $sql .=" SUM(transaction_status = 'cancelled') cancelled FROM user_transaction GROUP BY transaction_status";

    $sth = mysql_query($sql) or die(mysql_error()); 

    /*$result  = mysql_fetch_array($sth, MYSQL_ASSOC); 
    print_r($result); die;*/
    $rows = array();
    //flag is not needed
    $flag = true;
    $table = array();
    $table['cols'] = array(

    // Labels for your chart, these represent the column titles
    // Note that one column is in "string" format and another one is in "number" format as pie chart only required "numbers" for calculating percentage and string will be used for column title
    array('label' => 'Transaction Category', 'type' => 'string'),
    array('label' => 'Percentage', 'type' => 'number')

);
//print_r($table);

$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $temp = array();
    // the following line will be used to slice the Pie chart
    $temp[] = array('v' => (string) $r['user_transaction']); 
//print_r($temp);
    // Values of each slice
    $temp[] = array('v' => (int) $r['transaction_count']); 
    //print_r($temp);

    $rows[] = array('c' => $temp);
    //print_r($rows);

}

$table['rows'] = $rows;

//print_r($table);

$jsonTable = json_encode($table);
//echo $jsonTable;


    ?>

如果我执行上述查询,我​​会得到以下结果:

carried_out     success     inprocess   fail    cancelled
18  18  0   0   0
8   0   8   0   0
64  0   0   0   64

但我希望将结果分为两列,名为 transactions_category 和 transaction_count。你能帮我做些什么改变我应该做 SQL 查询以实现这一目标吗?提前致谢。

【问题讨论】:

    标签: php mysql database arrays


    【解决方案1】:

    为您的查询试试这个

    SELECT 'Success' as transactionType, count(*) from user_transaction where transaction_status = 'success';
    UNION
    SELECT 'In Process' as transactionType, count(*) from user_transaction where transaction_status = 'inprocess'
    UNION
    SELECT 'Fail' as transactionType, count(*) from user_transaction where transaction_status = 'fail'
    UNION
    SELECT 'Cancelled' as transactionType, count(*) from user_transaction where transaction_status = 'Cancelled';
    

    使用联合运算符将来自多个查询的结果集组合成一个结果集。

    【讨论】:

    • 我试过你的查询,但它给出了错误。你能给我一个查询的确切可运行代码吗?我注意到的另一件事是您没有在查询中的任何地方提及 FROM 表名。
    • 用 from 子句更新了代码...它现在 lints 但我没有你的表来测试它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多