显示博客帖子的正确类别

时间:2011-10-24 07:20:03

标签: php blogs categories

我正在尝试获取有关特定博客帖子的所有类别,但它不会起作用,因为我希望它能够正常工作。您可以在下面看到SQL和代码。 $blog获取有关特定博客帖子的信息。

CREATE TABLE IF NOT EXISTS `blogposts` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `id_user_created` int(10) DEFAULT '0',
  `id_user_edited` int(10) DEFAULT '0',
  `post_subject` varchar(100) NOT NULL,
  `post_message` text NOT NULL,
  `post_categories` text NOT NULL,
  `date_published` datetime NOT NULL,
  `date_edited` datetime NOT NULL,
  `info_ipaddress_created` text NOT NULL,
  `info_ipaddress_edited` text NOT NULL,
  `is_shared` enum('0','1') DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)


CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `id_user` int(10) DEFAULT '0',
  `post_name` text NOT NULL,
  `date_added` datetime NOT NULL,
  `date_edited` datetime NOT NULL,
  `info_ipaddress` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)


$get_categories = "SELECT * FROM blogposts, categories
                   WHERE blogposts.id = '".(int)$blog['id']."'
                   AND blogposts.post_categories = categories.id
                  ";

foreach($sql->query($get_categories) AS $category) {
    echo '<a href="'.url('blog/category/'.$category['post_name']).'" class="grey-link">';
        echo $category['post_name'];
    echo '</a>';
}


INSERT INTO blogposts` (id, id_user_created, id_user_edited, post_subject, post_message, post_categories, date_published, date_edited, info_ipaddress_created, info_ipaddress_edited, is_shared)
VALUES (1, 1, 1, 'test', 'testar', '1', '', '', '', '', '0'),
(2, 1, 1, 'med kategorier', 'wiho!', '1|2', '', '', '', '', '0');

INSERT INTO categories` (id, id_user, post_name, date_added, date_edited, info_ipaddress)
VALUES (1, 1, 'test', '', '', ''),
(2, 1, 'test2', '', '', '');

现在它只在我发布的两个博文上打印Categorized in test,。它应该打印出第一篇文章的Categorized in test和第二篇文章的Categorized in test, test2post_categories看起来像这样:1 | 2这是特定类别的ID。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果我查看您的'博客帖子'表,您的'post_categories'字段是文字类型。我不知道那里有什么,但我可以想象它是一个字符串,其中id被分隔成一些字符,如分号。这种方法限制了查询的灵活性。通过创建链接表,您会更好。这意味着您引入了一个新表,该表负责博客帖子及其类别之间的链接。看起来像:

CREATE TABLE IF NOT EXISTS `blogposts` ( 
  `id` int(10) NOT NULL AUTO_INCREMENT, 
  `post_message` text NOT NULL,
  PRIMARY KEY (`id`), 
  UNIQUE KEY `id` (`id`) 
) 

CREATE TABLE IF NOT EXISTS `categories` ( 
  `id` int(10) NOT NULL AUTO_INCREMENT, 
  `category_name` text NOT NULL, 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `id` (`id`) 
) 

CREATE TABLE IF NOT EXISTS `post_categories` ( 
  `post_id` int(10) NOT NULL AUTO_INCREMENT, 
  `category_id` text NOT NULL
) 

此最后一个表可用于获取随博客文章提供的所有类别。您可以使用JOIN查询它,如下所示:

SELECT * 
FROM blogposts b
INNER JOIN post_categories pc ON pc.post_id=p.id
INNER JOIN categories c ON c.id=pc.category_id
WHERE b.id=<yourvariable>

您将拥有一个包含大量重复的列表,但每行都是针对另一个类别,您可以使用它来显示某个地方或您拥有它的任何目的。也许将它分成两个查询更清晰。得到你的id和b的博客帖子。使用链接表获取blogpost附带的类别。