2010-09-14 23 views
0

嘿大家。當我試圖學習一些PHP和MySQL時,我遇到了一個我在解決問題時遇到困難的問題。我需要一個PHP腳本來查詢mySQL數據庫的國家,書籍,book_price。這裏是我的DBTABLE:如何將結果分組到php中的子組中

+----+-------+----------+------------------------+ 
| id |Country|Books  | Book_price    | 
+----+-------+----------+------------------------+ 
| 1 | USA | Zorro  | 10 | 
| 2 | USA | Zorro  | 20 | 
| 3 | USA | Zorro  | 50 | 
| 4 | USA | Leon  | 200 | 
| 5 | USA | Leon  | 240 | 
| 6 | ITALY| Tarzan | 70 | 
| 7 | ITALY| Tarzan | 30 | 
| 8 | ITALY| Tarzan | 100 | 
| 9 | ITALY| Cobra  | 300 | 
| 10 | ITALY| Cobra  | 320 | 
| 11 | ITALY| Cobra  | 350 | 
+----+------+-----------+------------------------+ 

我想組織基於國家,書籍,共書,總的國家,總計GEN(這是所有國家總的總和),結果顯示這樣的結果:

+----------------------------------------------------+ 
| USA            | 
+----------------------------------------------------+ 
|  Zorro 10 | 
|    20 | 
|    50 | 
+----------------------------------------------------+ 
| Total Zorro: 80 | 
+----------------------------------------------------+ 
|  Leon 200 | 
|   240 | 
+----------------------------------------------------+ 
| Total Leon:440 | 
+----------------------------------------------------+ 
|Total USA:  520 | 
+----------------------------------------------------+ 
|ITALY  | 
+----------------------------------------------------+ 
|  Tarzan  70 | 
|     30 | 
|    100 | 
+----------------------------------------------------+ 
| Total Tarzan:200 | 
+----------------------------------------------------+ 
|   Cobra 300 | 
|    320 | 
|    350 | 
+----------------------------------------------------+ 
| Total Cobra: 970 | 
+----------------------------------------------------+ 
|Total ITALY:  1170 | 
+----------------------------------------------------+ 
|TOTAL GEN:  1690 | 
+----------------------------------------------------+ 

謝謝

回答

0
$conn = mysql_connect("localhost", "mysql_user", "mysql_password"); 
mysql_select_db("mydbname"); 

$sql = 'SELECT * FROM table_name'; 
$result = mysql_query($sql); 

$data = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    if (empty($data[ $row['Country'] ])) { 
     $data[ $row['Country'] ] = array(); 
    } 

    if (empty($data[ $row['Country'] ][ $row['Books'] ])) { 
     $data[ $row['Country'] ][ $row['Books'] ] = array(); 
    } 

    $data[ $row['Country'] ][ $row['Books'] ][] = $row['Book_price']; 
} 


$totalSum = 0; 
foreach ($data as $country => $books) { 

    echo '<b>' . $country . '</b><br/>'; 

    $totalCountry = 0; 
    foreach ($books as $book => $prices) { 
     $sum = array_sum($prices); 

     echo '<u>' . $book . '</u><br/>'; 

     echo implode(',', $prices) . '<br/>; 

     echo 'Total ' . $book . ':' . $sum . '<br/>'; 

     $totalCountry += $sum; 
    } 


    echo 'Total ' . $country . ':' . $totalCountry . '<br/>'; 

    echo '<hr/>'; 

    $totalSum += $totalCountry; 

} 

echo 'TOTAL GEN: ' . $totalSum; 
+0

對不起 - 錯過了一行。看看我的編輯。線28'$總和= ....'。 – hsz 2010-09-14 11:02:38

+0

謝謝。現在它工作正常。 – 2010-09-14 11:15:48

0

嘗試:

SELECT country, books, SUM(price) 
FROM sales 
GROUP BY country, books WITH ROLLUP; 

行,其中書籍爲空將返回總對每個國家 行,其中國家和書籍是返回null總爲整個查詢

持有的最後一個國家/書
+0

謝謝您的快速重播。 – 2010-09-14 11:20:35

0

使用額外的變量及其小計:

$last = array('Country' => null, 'Books' => null); 
$subtotals = array('Country' => 0, 'Books' => 0); 
echo '<table>'; 
while ($row = mysql_fetch_assoc($result)) { 
    if ($row['Books'] !== $last['Books']) { 
     if (!is_null($last['Books'])) { 
      echo '<tr><td colspan="2">Total '.$last['Books'].': '.$subtotals['Books'].'</td></tr>'; 
     } 
     $last['Books'] = $row['Books']; 
     $subtotals['Books'] = $row['Book_price']; 
    } else { 
     $subtotals['Books'] += $row['Book_price']; 
    } 
    if ($row['Country'] !== $last['Country'])) { 
     if (!is_null($last['Country'])) { 
      echo '<tr><td colspan="2">Total '.$last['Country'].': '.$subtotals['Country'].'</td></tr>'; 
     } 
     echo '<tr><th colspan="2">'.$row['Country'].'</th></tr>'; 
     $last['Country'] = $row['Country']; 
     $subtotals['Country'] = $row['Book_price']; 
    } else { 
     $subtotals['Country'] += $row['Book_price']; 
    } 
    echo '<tr><td>'.$row['Books'].'</td><td>'.$row['Book_price'].'</td></tr>'; 
} 
echo '</table>'; 
+0

感謝您的快速回放。這個腳本也可以。 – 2010-09-14 11:21:47

0

檢查了這一點!

<?php 
include ("config.php"); 

function render($price3) { 
    $output = "<td align='right'>".number_format($price3->book_price, 0, ',', '.')."</td>"; 
    $output .= "</tr>"; 
    return $output; 
} 
echo "<table border='1'>"; 
echo "<tr> 
    <th>books</th> 
    <th>price</th> 
    </tr>"; 
$result = mysql_query("select id, country, books, book_price from test") or die(mysql_error()); 
$set = array(); 
while ($record = mysql_fetch_object($result)) { 
    $set[$record->country][$record->books][] = $record; 
} 
$sum_country = 0; 
foreach ($set as $country => $price1) { 
    echo "<tr> 
     <td align='center'>{$country}</font></td> 
     <td></td> 
     </tr>"; 

    foreach ($price1 as $books => $price2) { 
    echo "<tr> 
     <td>{$books}</td>"; 

     foreach ($price2 as $price3) { 
     echo render($price3); 
     } 

     $sum_books = 0; 
    foreach($price2 as $grbooks){ 
     $sum_books += $grbooks->book_price; 
    } 

    echo "<tr><td>Total {$books}</td> 
    <td align='right'>".number_format($sum_books, 0, ',', '.')."</td> 
    </tr>"; 
    } 

     $sum_country += $sum_books; 

    echo "<tr<td>Total {$country}</td> 
    <td align='right'>".number_format($sum_country, 0, ',', '.')."</td> 
    </tr>"; 
    } 
    echo "</table>";