如何将查询结果从多列转换为两列?

时间:2013-07-16 03:41:23

标签: php mysql database arrays

我正在使用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查询以实现这一目标吗?提前致谢。

1 个答案:

答案 0 :(得分: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';

使用union运算符将多个查询的结果集合并到一个结果集中。