2015-09-16 41 views
1

我正在嘗試使用PHP做些事情& MySQL我只是無法擺脫困境。PHP MySQL將輸出拆分成區段

我有采用以下結構(它們是兩個表,但是,當他們在SQL查詢中加入將作爲一個)的表:

id | brand | model 
1 | brand1 | model1 
2 | brand1 | model2 
3 | brand1 | model3 
4 | brand2 | modelA 

我已經能夠讓PHP輸出以下罰款:

brand1 model1 
brand1 model2 
brand1 model3 
brand2 modelA 

我真的希望能夠做的是輸出爲:

Brand1 
Model1 
Model2 
Model3 

Brand2 
ModelA 

任何人有任何想法?

這是我當前的代碼:

<?php 
$result = mysql_query("SELECT cameras.cameraid, cameras.model, brands.brand FROM cameras JOIN brands ON cameras.brandid=brands.brandid WHERE cameras.categoryid='$cat' ORDER BY brands.brand ASC, cameras.level ASC")or die(mysql_error()); 

while($row = mysql_fetch_array($result)) 
{ 
    echo "<li><a href='camera.php?id=". $row['cameraid'] . "'>" . $row['brand'] . " " . $row['model'] . "</a></li>"; 
} 

?> 
+0

創建一個數組。循環數據。在該數組中,爲每個品牌創建數組(如果它尚未創建)。將模型推入正確的品牌。基本上,製作一個二維數組。 –

+0

請給我們你試過的代碼 – Ahmad

+0

你可以使用嵌套查詢。外部查詢:獲得獨特品牌,foreach品牌(內部查詢)獲取所有模型。 – Maximus2012

回答

3

你在找什麼是一個嵌套的二維數組foreach -loop。這將讓你有一個數組,看起來像這樣

Array ( 
    [brand1] => Array ( 
     [1] => model1 
     [2] => model2 
     [3] => model3 
    ) 
    [brand2] => Array ( 
     [4] => modelA 
     [5] => modelB 
     [6] => modelC 
    ) 
) 

我們用它來我們的優勢,當我們後來呼應出模特的每一個品牌的列表。第一個數組將包含所有品牌,而每個品牌都是它自己的數組 - 創建包含所有模型(以及產品ID作爲該數組中元素的關鍵字的產品ID)的二維數組。

將您的每個元素放入while($row = mysql_fetch_array($result)) -loop的數組中,並使用嵌套的foreach -loop將它們回顯出來。

while ($row = mysql_fetch_array($result)) { 
    // Here we fetch all the results, and put it into a two-dimentional array 
    // with keys as brandname and the ID of the product 
    $brands[$row['brand']][$row['cameraid']] = $row['model']; 
} 

// Then we echo them all out in a list! 
foreach ($brands as $key=>$brand) { 
    // The $key is the name of the brand 
    echo $key."<ul>"; 
    foreach ($brand as $id=>$model) { 
     // The $id is the ID of the camera in the table 
     // The $model is the model-name itself 
     echo "<li><a href='camera.php?id=".$id."'>".$model."</a></li>"; 
    } 
    echo "</ul>"; 
} 

此外,它廢棄,不推薦,使用mysql_*功能,你應該考慮移動到mysqli_*PDO爲更好的功能,持續的支持和更好的安全性。

+0

謝謝,這工作得很好。非常好的解釋詳細的答案! – bigal

-1
下面

是使用表格的代碼它會給你並知道如何去實現你的任務

$sql = mysql_query("SELECT id, member_name FROM member_table ORDER BY id DESC LIMIT 15"); 
$i = 0; 
// Establish the output variable 
$dyn_table = '<table border="1" cellpadding="10">'; 
while($row = mysql_fetch_array($sql)){ 

    $id = $row["id"]; 
    $member_name = $row["member_name"]; 

    if ($i % 3 == 0) { // if $i is divisible by our target number (in this case "3") 
     $dyn_table .= '<tr><td>' . $member_name . '</td>'; 
    } else { 
     $dyn_table .= '<td>' . $member_name . '</td>'; 
    } 
    $i++; 
} 
$dyn_table .= '</tr></table>'; 

線通過這個代碼的行解釋是在下面的鏈接

陣列網格輸出教程會給你一些想法嘗試使用這個爲您的韓元scnario Array Grid output tutorial well explained video

+1

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

好的,但我想評論這個,但我的分數不允許我評論我會在這裏粘貼代碼 –

1

你應該嘗試這樣的事情。它使用多維數組來分組項目。

<?php 
$result = mysql_query("SELECT cameras.cameraid, cameras.model, brands.brand FROM cameras JOIN brands ON cameras.brandid=brands.brandid WHERE cameras.categoryid='$cat' ORDER BY brands.brand ASC, cameras.level ASC")or die(mysql_error()); 

$brands = array(); 
while($row = mysql_fetch_array($result)) 
{ 
    $brands[$row['brand']][] = array($row['model'], $row['cameraid']); 
    echo "<li><a href='camera.php?id=". $row['cameraid'] . "'>" . $row['brand'] . " " . $row['model'] . "</a></li>"; 
} 

foreach($brands as $brand => $data){ 
    echo $brand . "<br>"; 
    foreach($data as $item){ 
     echo "<li><a href='camera.php?id=" . $item[1] . "'>" . $item[0] . "</a></li>"; 
    } 
} 

?> 
+0

這工作,謝謝! – bigal