[英]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.