我试图获得关于特定博客帖子的所有类别,但它不会像我想要的那样工作。下面可以看到SQL和代码。$blog
获取特定blogpost的信息
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, test2
。post_categories
看起来像这样:1|2,这是特定类别的ID。
如果我看一下你的'blogposts'表,你的'post_categories'字段的类型是text。我不知道里面是什么,但我可以想象它是一个字符串,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>
你会得到一个有很多重复的列表,但每一行都是另一个类别,你可以用它来显示在某个地方或任何你想要的目的。也许把它分成两个查询会更简洁:a.获取带有id的blogpost, b.通过使用链接表获取随blogpost而来的类别。