【发布时间】:2011-09-26 06:24:40
【问题描述】:
情况
我目前正在开发一个博客系统,并且我一直在尝试获取由特定用户发布的所有类别的帖子。
查询只显示数据库中的第一个帖子,不管用户有多少帖子。此外,生成的类别输出是错误的。
数据库
这里是创建三个必需表的 SQL 命令。
发布
create table Post(
headline varchar(100),
date datetime,
content text,
author int unsigned,
public tinyint,
type int,
ID serial,
Primary Key (ID),
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
author 是创建帖子的用户的 ID,public 确定帖子是否可以被所有人阅读或只是草稿,type 确定它是否是博客帖子 (0)或者别的什么。
类别
create table Kategorie(
name varchar(30),
short varchar(200),
ID serial,
Primary Key (name)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Post_Kategorie
create table Post_Kategorie(
post_ID bigint unsigned,
kategorie_ID bigint unsigned,
Primary Key (post_ID, kategorie_ID),
Foreign Key (post_ID) references Post(ID),
Foreign Key (kategorie_ID) references Kategorie(ID)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
查询
这是我目前的查询,但如上所述,它不像我想要的那样工作。
SELECT Post.headline, Post.date,
CONCAT(
"[", GROUP_CONCAT('{"name":"',Kategorie.name,'","id":',Kategorie.ID,'}'), "]"
) as "categorys"
FROM Post, Kategorie, Post_Kategorie
WHERE Post.author = 1
AND(
Post.public = 1
AND Post.type = 0
)AND(
Post_Kategorie.post_ID = Post.ID
AND Post_Kategorie.kategorie_ID = Kategorie.ID
)
由于一篇文章可以有多个类别,因此查询会生成 JSON,然后将其解码为 PHP 中的对象。这是存档的简单方法,我想。
我在这里错过了什么?
【问题讨论】: