Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取用户的所有帖子及其类别';s 形势_Php_Mysql_Sql_Select - Fatal编程技术网

Php 获取用户的所有帖子及其类别';s 形势

Php 获取用户的所有帖子及其类别';s 形势,php,mysql,sql,select,Php,Mysql,Sql,Select,我目前正在一个博客系统上工作,我一直在努力获取所有由特定用户制作的带有其类别的帖子 查询只显示数据库中的第一篇文章,不显示用户有多少篇文章。此外,生成的类别输出是错误的 数据库 下面是创建三个必需表的SQL命令 邮递 author是创建该帖子的用户的ID,public确定该帖子是否可以从所有人那里阅读或只是草稿,type确定它是博客帖子(0)还是其他内容 类别 卡特戈里邮政局 询问 这是我目前拥有的查询,但是如上所述,它不能像我希望的那样工作 SELECT Post.headline, Post

我目前正在一个博客系统上工作,我一直在努力获取所有由特定用户制作的带有其类别的帖子

查询只显示数据库中的第一篇文章,不显示用户有多少篇文章。此外,生成的类别输出是错误的

数据库 下面是创建三个必需表的SQL命令

邮递
author
是创建该帖子的用户的ID,
public
确定该帖子是否可以从所有人那里阅读或只是草稿,
type
确定它是博客帖子(
0
)还是其他内容

类别 卡特戈里邮政局 询问 这是我目前拥有的查询,但是如上所述,它不能像我希望的那样工作

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
。当您这样做时,您的联接将始终表现为
内部联接

为了始终拥有帖子,您需要
左加入

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 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
)
GROUP BY Post.headline, Post.date
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