情况
我目前正在开发Blog系统,并且一直试图获取特定用户撰写的所有帖子及其类别.
该查询仅显示数据库中的第一条帖子,而不会询问用户有多少条帖子.同样,生成的类别输出是错误的.
数据库
这是创建三个必需表的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是确定该帖子可以被所有人阅读还是只是草稿,类型则确定是博客帖子(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中的对象.想,这是将其存档的简便方法.
我在这里想念什么?