php对帖子分类,php-从用户那里获取所有帖子及其类别的

情况

我目前正在开发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中的对象.想,这是将其存档的简便方法.

我在这里想念什么?

解决方法:

最后,您会丢失以下内容:

GROUP BY Post.headline, Post.date

更新资料

另外,您注意到,当帖子没有类别时,它不会出现.问题是您正在通过WHERE子句执行JOIN.当您这样做时,您的联接将始终表现为内部联接.

为了始终拥有帖子,您需要LEFT JOIN:

SELECT Post.headline, Post.date,

CONCAT(

"[", GROUP_CONCAT('{"name":"',Kategorie.name,'","id":',Kategorie.ID,'}'), "]"

) as "categorys"

FROM Post

LEFT JOIN Post_Kategorie

ON Post.ID = Post_Kategorie.post_ID

LEFT JOIN Kategorie

ON Post_Kategorie.kategorie_ID = Kategorie.ID

WHERE Post.author = 1

AND Post.public = 1

AND Post.type = 0

GROUP BY Post.headline, Post.date

标签:select,sql,mysql,php

来源: https://codeday.me/bug/20191208/2089849.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值