PHP : Pivot Logic Make Columns from Row without crosstab query

PHP : Pivot Logic Make Columns from Row without crosstab query
I have Table like this




I Want to get data like this




Here Is the code for doing this...

1. Get Table in to Two Dimension Array


              $result = mysql_query($sql);
if (mysql_num_rows($result)==0)
echo 'no rows found ' . $sql;


$i=0;
while ($rows = mysql_fetch_array($result))
{
  //echo $rows[0]. $rows[1] .$rows[2].$rows[3]. "<br/>";
  $row[] = $rows;
 $i++;
}


//print_r($row);


2. Now apply the pivot logic in this 2 dimensional array to get desired columns:


//scope of local variables
$j=0;//row of $view
$k=0; //row of $row
$lastrowprojectname;
$projectname;
while ($k<$i)
{


$projectname = $row[$k]['project'] . ' U#'. $row[$k]['unit'];
if(strcmp($lastrowprojectname, $projectname) !=0)
 $j++; // get new row in array if project changed


$view[$j]['c1'] = $projectname;
$view[$j]['c2'] = $row[$k][capacity];


$milestone = $row[$k]['milestone'];
$a_date = $row[$k]['month'];
//echo '[' . $a_date .$milestone . ']';
//Pivot logic . Projects shall be missing if milestone case  dosent match
    if (strcasecmp($milestone, "Full Load") == 0)
         $view[$j]['c4'] = $a_date;


    if (strcasecmp($milestone, "COD") == 0)
         $view[$j]['c3'] = $a_date;
     if (strcasecmp($milestone, "Sync. with Coal")== 0)
         $view[$j]['c5'] = $a_date;




$lastrowprojectname = $projectname;
$k++;


//echo $view[$j]['c1'] . $view[$j]['c2'] . $view[$j]['c4'] . "<br/>";
}


3. For my case i wanna fill something in empty fields:

// refill empty fields
for($i=0;$i<=$j;$i++)
{
//if(!isset($view[$i]['c3']))$view[$i]['c3']="na3"; //cod  na3
if(!isset($view[$i]['c4']))$view[$i]['c4']="na4"; //full load .. it will help to sort out projects not having any full load later during display and cap calculation
//if(!isset($view[$i]['c5']))$view[$i]['c5']="na5"; //sync with coal


//if sync with coal empty then copy full load in it.. uncomment with above line to use empty...
if(!isset($view[$i]['c5']))$view[$i]['c5']=$view[$i]['c4']; //sync with coal


//echo $view[$i]['c1'] . $view[$i]['c1'] . $view[$i]['c4'] . "<br/>";




}


4. Now want to sort 2d array as per date


//this function sorts the array according to full load column ie c4 dates
function cmp($a,$b) {
if ($a['c4'] == $b['c4']) return 0;
return ($a['c4'] < $b['c4'])? -1 : 1;
}


usort($view,'cmp');
//$view = array_reverse($view); //to sort descending uncomment this
//print_r($view);


5. Go through For loop to get desired result.


for($i=0;$i<$j;$i++)


{


   $temp.= "<tr><td/>".  $view[$i]['c1'] ."</td><td> " .   $view[$i]['c2']. "</td><td> " .  cmdate($view[$i]['c5'])."</td><td> " .  cmdate($view[$i]['c4'])."</td><td> " .  cmdate($view[$i]['c3']).  "</td></tr>"; 
}


- Vinod Kotiya
www.vinodkotiya.com


Comments