2016-03-31 18 views
3

毎月の売上記録表があります。この場合、セールスマンはそれぞれbdnkというコードを持っています。月ごとに合計行を月ごとに集計する方法とユーザー名

私はこの結果を持っているクエリの後のMySQL

select sale_plc 
     , month(sale_date) as mon 
     , sum(sale_cost) as cost 
from daily_sales 
where year(sale_date)='2016' 
group 
    by year(sale_date) 
     , month(sale_date) 
     , sale_plc 
order 
    by month(sale_date) 
     , sale_plc asc 
LIMIT 0, 30 

id mon cost 
bd 1 224787 
nk 1 721102 
bd 2 440399 
nk 2 898020 
bd 3 363543 
nk 3 878250 

  • ながらIDを
    =セールスマンコード(sale_plc)
  • =月番号
  • 費用 =このIDからの今月の合計販売額。

結果によると、私はこのような配列で結果を期待しています。 アレイ

(
    [1] => Array 
     (
      [mon] => 1 
      [bd] => 224787 
      [nk] => 721102 
     ) 
    [2] => Array 
     (
      [mon] => 2 
      [bd] => 440399 
      [nk] => 898020 
     ) 
    [3] => Array 
     (
      [mon] => 3 
      [bd] => 363543 
      [nk] => 878250 
     ) 
    ) 

は、私はsale_plcとは何かであることを知っています。私はそれを配列にする必要がありますが、そうする考えはありません。

+3

'mysql'または' sql-server'ですか?それらは同じものではなく、クエリの構文を変更する可能性があります。 – Sean

+0

私はsql-queryタグの構文に基づいてsql-serverタグを削除しました。特に、MySqlに属しSql-Serverでは使用できない 'Limit'キーワードです。 –

+1

これはPHP – Strawberry

答えて

2

私はあなたにSQL出力を持っていないので、私は配列を作成し、あなたの配列と同じ機能を持った独自のコードを作ります。

PHP

$arr = array(array("id" => "bd", "mon" => "1", "cost" => "224787"), 
      array("id" => "nk", "mon" => "1", "cost" => "721102"), 
      array("id" => "bd", "mon" => "2", "cost" => "440399"), 
      array("id" => "nk", "mon" => "2", "cost" => "898020"), 
      array("id" => "bd", "mon" => "3", "cost" => "363543"), 
      array("id" => "nk", "mon" => "3", "cost" => "878250"), 
      ); 

$output_arr = array();  
$tmp = 0; 
foreach($arr as $key => $value){ 
    if($tmp == 0 || $tmp != $value['mon']) 
     $output_arr[$value['mon']][mon] = $value['mon']; 
    if($value['id'] == 'bd') 
     $output_arr[$value['mon']][$value['id']] = $value['cost']; 
    if($value['id'] == 'nk') 
     $output_arr[$value['mon']][$value['id']] = $value['cost']; 
    $tmp = $value['mon']; 
} 
echo "<pre>"; 
print_r($output_arr); 
echo "</pre>"; 

出力

Array 
(
    [1] => Array 
     (
      [mon] => 1 
      [bd] => 224787 
      [nk] => 721102 
     ) 

    [2] => Array 
     (
      [mon] => 2 
      [bd] => 440399 
      [nk] => 898020 
     ) 

    [3] => Array 
     (
      [mon] => 3 
      [bd] => 363543 
      [nk] => 878250 
     ) 

) 

私はすでにあなたのSQLの出力と答えています。あなたのSQLの例を考えてみましょう。

PHP

$output_arr = array(); 
//Your sql 
$sql = "select sale_plc 
     , month(sale_date) as mon 
     , sum(sale_cost) as cost 
from daily_sales 
where year(sale_date)='2016' 
group 
    by year(sale_date) 
     , month(sale_date) 
     , sale_plc 
order 
    by month(sale_date) 
     , sale_plc asc 
LIMIT 0, 30"; 
$tmp = 0; 
$i = 0; 
$qry = mysqli_query($conn, $sql); 
while ($obj = mysqli_fetch_object($qry)){ 
    if($tmp == 0 || $tmp != $obj->mon) 
     $output_arr[$obj->mon][mon] = $obj->mon; 
    if($obj->id == 'bd') 
     $output_arr[$obj->mon][$obj->id] = $obj->cost; 
    if($obj->id == 'nk') 
     $output_arr[$obj->mon][$obj->id] = $obj->cost; 
    $tmp = $obj->mon; 
} 

print_r($output_arr); 

出力:

Array(
[1] => Array 
    (
     [mon] => 1 
     [bd] => 224787 
     [nk] => 721102 
    ) 
[2] => Array 
    (
     [mon] => 2 
     [bd] => 440399 
     [nk] => 898020 
    ) 
[3] => Array 
    (
     [mon] => 3 
     [bd] => 363543 
     [nk] => 878250 
    ) 
) 

何らかの問題が、その後、私に教えてください場合は、この答えを試してみてください。

+0

Frayne、助けてくれてありがとうございますが、結果は次のようになります: 'Array([1] => Array([mon] => 1)[2] => Array([mon] => 2)[3] =>配列([mon] => 3)) ' – Wilf

+0

あなたは結果を得ましたか?それとももう少し試してみる必要がありますか? –

関連する問題