2015-09-16 40 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