繁体   English   中英

打印查询结果时,如何在HTML中对元素进行分组?

[英]How can I group elements in HTML while printing query results?

我有一个带有不同类型食物的MySQL表:

id     name       type
1      apple      1
2      orange     1
3      lettuce    2
4      broccoli   2
5      pork       3

然后在我的PHP文件中,我有一个数组,其中包含每种食物的数字代码,如下所示:

$foodTypes = array (
    1 => 'FRUITS',
    2 => 'VEGETABLES',
    3 => 'MEAT'
);

我想要的是选择我的整个食物表,并以食物类型为标题的HTML打印它,如下所示:

FRUITS:
apple
orange

VEGETABLES:
lettuce
broccoli

MEAT:
pork

我知道如何通过多个查询来执行此操作,每种食物都可以执行一个查询,但是我想通过一个查询来执行此操作。 我怎样才能做到这一点?

你做这个:

SELECT name, type from [table] group by type

这样就可以进行选择和分组了。 要命名它们,请添加一个case语句:

SELECT id, name, 
     CASE type 
         WHEN 1 
           THEN 'Fruits'
         WHEN 2 
           THEN 'Vegetables'
         WHEN 3 
           THEN 'Meats'
     END AS 'type' 
FROM [table] 
ORDER BY type

另外,您可以使用数组,而不是通过用$foodtypes[0]替换大小写结果来对情况进行硬编码。

这将负责分组。 我想我可能误会了。 如果您需要用它来绘制每一个,它可能看起来应该更像这样:(注意,我删除了GROUP BY并将其更改为ORDER BY)

html

<table>
<tr><td>id</td><td>name</td><td>type</td>

的PHP

    $result = $mysqli->query($stmt);

    while($row = $result->fetch_assoc()){
        print '<tr><td>'. $row['id'] .'</td><td>'. $row['name'] .'</td><td>'. $row'type'] .'</td></tr>';

}

结束PHP

关闭html

</table>

那应该是您需要的一切。

我建议为您的类型在数据库中添加一个附加表

id   type
1    FRUITS
2    VEGETABLES
3    MEAT

然后您的数据库绘制将是

SELECT
    t1.name,
    t2.type
FROM tblFood AS t1
INNER JOIN tblTypes AS t2 ON t2.id = t1.type

在PHP方面:

$result = array();
while($row = $query->fetch_assoc()) {
    $result[$row['type']][] = $row['name'];
}

然后回显HTML:

foreach($result as $type=>$list) {
    echo "<h1>".htmlspecialchars($type)."</h1>";
    foreach($list as $food) {
        echo "<p>".htmlspecialchars($food)."</p>";
    }
}

我之前所说的是这样的...

设定:

  $foodTypes = array (
    1=> 'FRUITS',
    2=> 'VEGETABLES',
    3=> 'MEAT'
  );
  $rows = array(
    1 => array('name'=> 'apple', 'type' => 1),
    2 => array('name'=> 'orange', 'type' => 1),
    3 => array('name'=> 'lettuce', 'type' => 2),
    4 => array('name'=> 'broccoli', 'type' => 2),
    5 => array('name'=> 'pork', 'type' => 3)
  );

我只是用数据制作了$ rows,但是您可以使用sql select轻松地做到这一点,然后

array_push ($rows, $row)

环:

foreach ($foodTypes as $fud_key => $temp){
echo "<h1>" .$temp. "</h1>";
echo "<br>";
foreach($rows as $key => $value){ 
  if($value['type'] == $fud_key){
     echo "<span>" . $value['name'] . "</span>";
     echo "<br>";
    }; 
  };
}

输出:

水果

苹果

橙子

蔬菜

生菜

西兰花

猪肉

我认为您应该能够使用已有的资源做到这一点。 首先,从食物表中按类型选择。

SELECT id, name, type FROM foods ORDER BY type;

然后遍历结果,每次类型更改时添加标题。

$type = null;                                // No type initially
while($row = $result->fetch_assoc()) {
    if ($row['type'] !== $type) {            // Check if type has changed
        $type = $row['type'];                // Reset type to the new type
        echo $foodTypes[$type] . ":<br/>";   // Print header
    }
    echo $row['name'] . "<br/>";
}

显然,这里的html非常简单,但是我认为您对如何设置格式有更具体的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM