这是我在 stackoverflow 中的第一个问题。
我有两个MYSQL表:类别和产品。我使用PHP中的while循环管理查询结果,以便用其产品对每个类别进行分组。这是我第一次这样做,而且我认为我非常“狡猾/硬编码”(对不起我的英文)。我认为这应该是一个更好的方法来做到这一点。所以,我想向专业程序员询问。这是我的代码:
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL auto_increment,
`name` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
CREATE TABLE IF NOT EXISTS `products` (
`id` int(11) NOT NULL auto_increment,
`name` text NOT NULL,
`description` text NOT NULL,
`category` int(11) NOT NULL,
`photo` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=33 ;
我有一个查询返回与其类别相关的产品:
SELECT categories.name as category,products.name as product
FROM categories
INNER JOIN products ON(categories.id = products.category)
使用PHP,我管理结果,为每个类别及其产品创建一个无序列表:
<?php
$category = '';//A control variable
while($row = mysql_fetch_array($query))
{
//if its a new category I start a new <ul>
if($row['category'] != $category)
{
//If it´s not the firt category I need to close previous one
if($category != '')
{
echo "</ul>\n";
}
//I start the new <ul>
echo '<h2>' . $row['category'] . '</h2>';
echo '<ul>';
}
//I create the correspondient <li>
echo '<li>' . $row['product'] . "</li>\n";
//Asign the value of actual category for the next time in the loop
$category = $row['category'];
}
//I neeed to close last <ul>
echo "</ul>\n";
?>
有没有更好的方法来执行此操作? 提前感谢您的回答!
答案 0 :(得分:4)
最好不要将HTML与PHP混合。
既然你需要我的建议(经过大约12年的资深PHP编码器),我只是快速地从头开始编码:
<?php
$pdo = new PDO($dsn, $user, $pass);
$sql = "SELECT categories.name as category,products.name as product
FROM categories
INNER JOIN products ON(categories.id = products.category)";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$categories = array();
while (($row = $stmt->fetch(PDO::FETCH_ASSOC)))
{
$category = $row['category'];
$categories[$category][] = $row['product'];
}
// In your view:
?>
<html>
<body>
<?php
foreach ($categories as $category => $products)
{
?>
<h2><?php echo $category; ?></h2>
<ul class="products">
<?php
foreach ($products as $product)
{
?>
<li><?php echo $product; ?></li>
<?php
}
?>
</ul>
<?php
}
?>
</body>
</html>
答案 1 :(得分:3)
我建议阅读Hierarchical Data。很棒的阅读。您应该特别注意嵌套集模型。
它需要花点时间学习并且需要一些实现,但最终结果非常值得!