2016-03-31 13 views
3

Ich habe eine Verkaufsrekordtabelle für jeden Monat. Jeder Verkäufer hat in diesem Fall seinen eigenen Code bd und nk.Wie Summe Summe Zeile jeden Monat Gruppe nach Monat und Benutzername

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 

Nach der Abfrage, die ich dieses Ergebnis haben:

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

Während

  • id = Verkäufer Code (sale_plc)
  • mon = Monatsnummer
  • Kosten = Gesamtverkauf dieses Monats von dieser ID.

Nach dem Ergebnis. Ich erwarte das Ergebnis mit Array wie folgt. 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 
     ) 
    ) 

Ich weiß, dass es etwas mit dem sale_plc zu tun ist. Ich muss es Array machen, aber ich habe keine Idee, dies zu tun.

+3

'mysql' oder' sql-server'? Sie sind nicht dasselbe und können die Syntax Ihrer Abfrage ändern. – Sean

+0

Ich habe das sql-server-Tag basierend auf der Syntax der SQL-Abfrage entfernt - speziell das Schlüsselwort 'Limit', das zu MySql gehört und nicht mit Sql-Server verwendet werden kann. –

+1

Dies ist eine einfache 1-dimensionale bis 2-dimensionale Array-Transformation in PHP – Strawberry

Antwort

2

Ich habe keine SQL-Ausgabe, also erstelle ich ein Array und mache meinen eigenen Code mit der gleichen Funktionalität wie ich für Ihr Array.

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>"; 

Ausgabe

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 
     ) 

) 

Ich habe bereits mit der SQL-Ausgabe beantworten. Gegeben das Beispiel mit Ihrem 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); 

Ausgang:

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

diese Antwort Versuchen Sie, wenn irgendein Problem dann kennen Sie mich bitte.

+0

Frayne, danke für deine Hilfe, aber das Ergebnis kommt so: 'Array ([1] => Array ([mon] => 1) [2] => Array ([mon] => 2) [3] => Array ([mon] => 3)) ' – Wilf

+0

hast du das Ergebnis ??? Oder muss ich ein bisschen mehr versuchen? –