gpt4 book ai didi

php - 有没有更好的方法在 PHP 中使用循环对查询结果进行分组?

转载 作者:行者123 更新时间:2023-11-29 01:19:04 25 4
gpt4 key购买 nike

这是我在 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";
?>

有没有更好的方法来做这个操作?预先感谢您的回答!

最佳答案

最好不要将 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>

关于php - 有没有更好的方法在 PHP 中使用循环对查询结果进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3620920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com