это мой первый вопрос в stackoverflow .
У меня есть две таблицы MYSQL: категории и продукты. Я управляю результатами запроса с помощью цикла while в PHP, чтобы сгруппировать каждую категорию с ее продуктами. Это первый раз, когда я что-то делаю, и я думаю, что сделал это очень "хитро / жестко" (извините за мой английский) Я думаю, что это должен быть лучший способ сделать это. Итак, я хотел бы спросить профессиональных программистов. Вот мой код:
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";
?>
Есть ли лучший способ сделать эту операцию?
Заранее спасибо за ваши ответы!