使用Sql子查询显示帖子

时间:2012-09-28 18:29:17

标签: mysql

我正在为我的部门建立一个小型社交网络。

我将主页作为您可以发表评论的地方,您的朋友可以对其进行评论。

我有 4个表 ... allposts_tb,friendship_tb,response_tb和signup_tb ..

allposts_tb 收集人员发布的更新和帖子,其中包含以下列all_id(PK)namecommenttime

友谊 _tb作为列(friend_id(Pk)mynamenewfriendstatus

response_tb 作为列(id(Pk)nameresponseall_id(Fk)time

signup_tb 作为列(signup_idlastnamefirstnameemailpasswordcountry profilepicture

我可以使用下面的SQL查询轻松显示人们发表的评论

 SELECT allposts_tb.all_id,allposts_tb.name,allposts_tb.comment, allposts_tb.time,
friendship_tb.myname,friendship_tb.newfriend,signup_tb.firstname,
signup_tb.lastname,signup_tb.email,signup_tb.profilepicture,
allposts_tb.expand   
FROM allposts_tb,friendship_tb,signup_tb
WHERE allposts_tb.name = friendship_tb.newfriend
 and friendship_tb.myname=colname and
 allposts_tb.name=signup_tb.email
ORDER BY allposts_tb.all_id DESC
and colname=$_SESSION['MM_Username']

我在显示人们对评论下面的特定评论做出的回复时遇到问题......就像复制Facebook的页面一样。当然你说了些什么,它应该显示在评论的正下方...... 我知道我打算使用子查询。在查询中,我给了你们..已经阅读了很多网页,但无法让它工作......请帮助我......

1 个答案:

答案 0 :(得分:1)

除了使用response_tb而不是allposts_tb表之外,您可以创建类似于第一个查询的第二个查询。然后在两个查询之间放置一个UNION ALL语句,组合结果。最后,您可以放置​​一个ORDER BY子句并按all_id排序,然后按时间排序。

只需在response_tb中将“comment”字段替换为查询中的“response”。

SQL很可能看起来像这样:

SELECT allposts_tb.all_id,allposts_tb.name,allposts_tb.comment, allposts_tb.time,
friendship_tb.myname,friendship_tb.newfriend,signup_tb.firstname,
signup_tb.lastname,signup_tb.email,signup_tb.profilepicture,
allposts_tb.expand   
FROM allposts_tb,friendship_tb,signup_tb
WHERE allposts_tb.name = friendship_tb.newfriend
 and friendship_tb.myname=colname and
 allposts_tb.name=signup_tb.email
and colname=$_SESSION['MM_Username']

UNION ALL

SELECT response_tb.all_id,response_tb.name,response_tb.response, response_tb.time,
friendship_tb.myname,friendship_tb.newfriend,signup_tb.firstname,
signup_tb.lastname,signup_tb.email,signup_tb.profilepicture,
response_tb.expand   
FROM response_tb,friendship_tb,signup_tb
WHERE response_tb.name = friendship_tb.newfriend
 and friendship_tb.myname=colname and
 response_tb.name=signup_tb.email
and colname=$_SESSION['MM_Username']
ORDER BY all_id DESC, time desc