I have a form (criteria.php) that includes two drop down lists from which a user can select a start period and an end period from a MySQL table. This form posts to a form called order_summary.php on which I am using the $start_period and $end_period variables from the criteria.php form to pull data from another MySQL table which will produce a summary of sales for those periods as illustrated by the following example:
$start_period $end_period $total ------------------------------------------------- Order Type | APR-00 | MAY-00 | Total | ------------------------------------------------- Widget 1 | $100 | $200 | $300 | Widget 2 | $300 | $200 | $500 | . . . OK. Fine and good. I have this working. My problem is this: How can I create a table which will dynamically adjust the number of columns based on the users request. That is, if the user requests APR-00 through MAY-00, the table will be built as illustrated above. If the user requests JAN-01 through JUN-00, the table will be built as illustrated below: $start_period through $end_period ---------------------------------------------------------------------------- ---------------------------------- Order Type | JAN-01 | FEB-01 | MAR-01 | APR-01 | MAY-01 | JUN-01 |Total | ---------------------------------------------------------------------------- ---------------------------------- Widget 1 | $100 | $200 | $300 | $300 | $300 | $300 | $300 | Widget 2 | $300 | $200 | $500 | $300 | $300 | $300 | $300 | . . . I have posted order_summary.php below. Any thoughts? Thanks, Randy Rankin ************************************ order_summary.php ************************************************** <? session_register($dbname); ?> <? require("./includes/salesdb.inc"); $query_first_last_period = "select period_id, period_name from periods where period_id between $start_period_id and $end_period_id GROUP BY period_id HAVING period_id = $start_period_id OR period_id = $end_period_id ORDER BY period_id"; $result_first_last_period = mysql_query($query_first_last_period); $row = mysql_fetch_row($result_first_last_period); for( $i= 0; $i<count($row);$i++ ) { if( $i == 0 ) $start_period_name = $row[$i]; elseif( $i == (count($row)-1) ) $end_period_name = $row[$i]; } echo "<font face=Tahoma size=2 color=#333999>"; echo "Salesperson: <b>$dbname</b><br>"; echo "Report Period: <b>$start_period_name through $end_period_name</b>"; echo "</font><P>"; echo "<table border=0 cellpadding=2 cellspacing=2>"; echo "<tr bgcolor=#333399><font face=Tahoma size=2 color=#ffffff>"; echo "<th align=left bordercolor=#808080><font color=#FFFFFF face=Tahoma size=2><b>Category</b></font></th>"; // ******************** Start Get the Order Summary Data *************** $sql_order_summary = "SELECT order_type, SUM(extended_dollars) from salesdata where salesperson = '$dbname' and period_id between '$start_period_id' and '$end_period_id' group by order_type"; $result_order_summary = mysql_query($sql_order_summary) or die ("I can't get the sales data!"); // ******************** Stop Get the Order Summary Data *************** // ******************** Start Get the Period Names for the Table Header *************** $sql_period_name = "Select period_name from periods where period_id between '$start_period_id' and '$end_period_id' order by period_id"; $result_period_name = mysql_query($sql_period_name) or die ("I can't get the period name!"); // ******************** End Get the Period Names for the Table Header *************** // ******************** Build and Print the Table Headers *************** $num_periods = mysql_numrows($result_period_name); if ($num_periods == 0) { echo "<font color=#ff0000><b>There were no records found for the periods selected.</b></font>"; } else while ($row = mysql_fetch_array($result_period_name)) { $period_name = $row["period_name"]; echo "<th align=left bordercolor=#808080><font color=#FFFFFF face=Tahoma size=2> <b>$period_name</b></th> </font>"; } echo "<th align=left bordercolor=#808080><font color=#FFFFFF face=Tahoma size=2><b>Total Sales</b></font></th>"; echo "</tr>"; // ******************** End Build and Print the Table Headers *************** // ******************** Start Calculate and Format Total Sales *************** $get_itemtot = "SELECT SUM(extended_dollars) FROM salesdata WHERE salesperson = '$dbname' and period_id between '$start_period_id' and '$end_period_id' "; $itemtot_result = mysql_query($get_itemtot) or die ("I can't do the math!"); $itemtot = mysql_result($itemtot_result,0,"SUM(extended_dollars)"); $fmt_Total_Sales = "\$".number_format($itemtot,0); // ******************** End Calculate and Format Total Sales *************** mysql_close(); //Display Results: Sales Summary Information: $num = mysql_numrows($result_order_summary); $alternate = "2"; // number of alternating rows if ($num == 0) { echo "<font color=ff0000><b>There were no records found for $dbname.</b></font>"; } else while ($row = mysql_fetch_array($result_order_summary)) { $Raw_Value = $row["SUM(extended_dollars)"]; $Value = "\$".number_format($Raw_Value,0); $type = $row["order_type"]; if ($alternate == "1") { $bcolor = "#EDEDF1"; $alternate = "2"; } else { $bcolor = "#ffffff"; $alternate = "1"; } echo "<tr> <td bgcolor = $bcolor align=left><font face=Tahoma size=2 color=#333999><b>$type </b></font></td> <td bgcolor = $bcolor align=left><font face=Tahoma size=2 color=#333999><b>DATA </b></font></td> <td bgcolor = $bcolor align=left><font face=Tahoma size=2 color=#333999><b>DATA </b></font></td> <td bgcolor = $bcolor align=left><font face=Tahoma size=2 color=#333999><b>DATA </b></font></td> <td bgcolor = $bcolor align=right><font face=Tahoma size=2 color=#333999><b>$Value </b></font></td> </tr>"; } mysql_free_result ($result_order_summary) ?> </table> <P> <a href="criteria.php"><font face="Tahoma" size="2"><img border="0" src="images/icon_arrows_right.gif" width="15" height="15">Select another Period</font></a>