我正在使用PHP和MySQL来显示积分的网站上工作。我已经制作了同一事物的2个版本,但我很难决定哪个版本是最适合使用的版本。一个使用2个表,另一个使用1个表。我进行了一些设置,在其中列出了职位名称,然后将人员放置在其下方。我无法决定是否更容易查看credits_position
表,然后从credits_people
中获取所需的内容,还是只使用credits_people
来容纳所有内容。哪个版本更易于更新?
SQL
CREATE TABLE `credits__topic` (
`topic_id` INT(11) NOT NULL AUTO_INCREMENT,`category_id` INT(11) DEFAULT NULL,`name` VARCHAR(48) DEFAULT NULL,`category` VARCHAR(48) DEFAULT NULL COMMENT 'Job name',PRIMARY KEY (`topic_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 26;
CREATE TABLE `credits__category` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(48) DEFAULT NULL COMMENT 'Job name',PRIMARY KEY (`category_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 6;
INSERT INTO `credits_people` (`topic_id`,`category_id`,`name`,`category`)
VALUES
(1,1,'Matthew Campbell','Creator'),(2,2,'Godzilla','Assistant'),(3,'Billy Bob',(4,4,'Martha Stewart','Tester'),(5,'Mothra','Designer'),(6,'Rodan','Contributing'),(7,'King Ghidorah',(8,3,'Mechagodzilla','Assistant');
INSERT INTO `credits_position` (`category_id`,`name`)
VALUES
(1,'Contributing');
PHP
<?php
$connection = mysqli_connect ("localhost","root","main");
// Version 1:
$data = mysqli_query ($connection,"SELECT `mc`.`name` AS 'category_name',`mt`.`name` AS 'topic_name',`mt`.`category` AS 'topic_category' FROM `credits_position` AS `mc` INNER JOIN `credits_people` AS `mt` USING (`category_id`);");
// Version 2:
$data = mysqli_query ($connection,"SELECT `name` AS 'category_name',`category` AS 'topic_category' FROM `credits_people`;");
// Works with both versions
$responses = array ();
while ($row = mysqli_fetch_array ($data)) {
array_push ($responses,$row);
}
// This loads the 1st category name.
$category = $responses [0] ["category_name"];
echo "<p>" . $category . "</p>\n";
echo "<ol>\n";
foreach ($responses as $response) {
// This loads when it finds that the category is different from the previous loop.
if ($category !== $response ["category_name"]) {
$category = $response ["category_name"];
echo "</ol>\n";
echo "<p>" . $response ["category_name"] . "</p>\n";
echo "<ol>\n";
}
echo "<li>" . $response ["topic_name"] . "</li>\n";
}
echo "</ol>";
mysqli_close ($connection);
?>