我有一个名为socialnetwork的数据库,有5个表category
,post_category
,posts
,subscribe
,user
。
我的表结构
-------- -------------
category posts
-------- ------------
categoryID postID
categoryName post
userID
categoryID
-------------- ---------------
post_category subscribe
--------------- ---------------
postID subscriberID
categoryID categoryID
--------------
usertable
--------------
userID
userName
表格中的数据
category table usertable
-------------------------- -------------------
categoryID categoryName userID userName
--------------------------- --------------------
1 film 1 jijojohn32
2 television 2 sijojohn
posts_category table subscribe table
------------------ -------------------------
postID categoryID subscriberID categoryID
--------------------- ------------------------
1 1 1 1
1 2 1 2
2 2 2 2
posts table
---------------------------------------------------
postID post userID categoryID
--------------------------------------------------
1 this post is cool 1 1
2 demo post 2 2
用户1可以订阅不同的类别,他可以看到他订阅的类别中的文章。这就是我想在这里实现的。我有这个问题,但它没有给我我想要的结果。
USE socialnetwork;
SELECT socialnetwork.usertable.userName,socialnetwork.posts.post, GROUP_CONCAT(socialnetwork.category.categoryName) as category
FROM socialnetwork.category
INNER JOIN subscribe
ON subscribe.categoryID = category.categoryID
INNER JOIN posts
ON posts.categoryID = subscribe.categoryID
INNER JOIN usertable
ON usertable.userID = posts.userID
INNER JOIN socialnetwork.post_category
ON post_category.postID = posts.postID
WHERE subscriberID = "1"
GROUP BY socialnetwork.category.categoryName
这是我得到的结果
---------------------------------
username post category
----------------------------------
jijojohn32 this post is cool film, film
sijojohn demo post television
我想要的结果
---------------------------------------------
username post category
-------------------------------------------
jijojohn32 this post is cool film,television
sijojohn demo post television
我想要他订阅的类别中的帖子,发布文章的用户的用户名以及帖子所在的类别。我的查询有什么问题?任何的想法 ?。感谢
答案 0 :(得分:2)
您没有通过正确的列聚合。我认为这是您想要的查询:
SELECT ut.userName, p.post, GROUP_CONCAT(c.categoryName) as category
FROM socialnetwork.category c INNER JOIN
subscribe s
ON s.categoryID = c.categoryID INNER JOIN
posts p
ON p.categoryID = s.categoryID INNER JOIN
usertable ut
ON ut.userID = p.userID INNER JOIN
socialnetwork.post_category pc
ON pc.postID = p.postID
WHERE subscriberID = 1
GROUP BY ut.userName, p.post;
答案 1 :(得分:1)
存在冲突
类别表包含
Category id and Category Name
帖子表由
组成
Post id and Corresponding Category Id
以及
Post_Category表包含
Post id and Category Id
因此它从Posts table
中挑选出来
第1行 - 只有1 category id
与之关联
我建议您从Category id
表
Post
在1个表中有2个键,在其他表中有2个键是没有意义的。
尝试建立主键外键关系。
希望有所帮助
答案 2 :(得分:1)
这是工作查询。我在表格中做了一些修改。从帖子中删除了categoryID
。制作了一个名为post_category的新表。
--------------
post_category
-------------
postID
categoryID
这是查询
SELECT GROUP_CONCAT(category.categoryName) as category , category.categoryID , subscribe.subscriberID , posts.post ,
usertable.userName
from category
INNER JOIN subscribe
ON subscribe.categoryID = category.categoryID
INNER JOIN post_category
ON category.categoryID = post_category.categoryID
INNER JOIN posts
ON posts.postID = post_category.postID
INNER JOIN usertable
ON usertable.userID = posts.userID
WHERE subscriberID = 1
GROUP BY post_category.postID