我想,你的系统将会有3个鲜明的观点和如下我将构建它:
- 项的列表 - 显示在物品描述和连接到该项目的职位数。例如
SELECT i.desc, ...., COUNT(p.pid) FROM items i LEFT JOIN posts p ON i.iid = p.iid GROUP BY i.iid ORDER BY i.date DESC
- 帖子所选项目的列表 - 显示在其下方显示的讯息,接着评论岗位和每个岗位e.g
SELECT p.desc, ...., COUNT(c.cid) FROM posts p LEFT JOIN comments c ON p.pid = c.pid WHERE p.iid = $iid GROUP BY p.pid ORDER BY p.date DESC
- 帖子页面提出的意见数量。这个页面需要两个查询。收集发布信息的查询,返回恰好1个数据库行。然后查询收集每个单独的评论附加到这个职位。例如。
SELECT p.desc, ... FROM posts p WHERE p.pid = $pid LIMIT 1
和SELECT c.desc, ... FROM comments c WHERE c.pid = $pid ORDER BY c.date DESC
。你可以在这里改变排序模仿计算器如何通过最古老的,票订单数据等
我会说这是可扩展的模型,我总是建议写瘦的MySQL查询只检索所需的每个显示的信息实体。
要模仿这个页面我会用下面的代码...
itemRs = mysql_query("SELECT i,iid, i.desc, ... FROM items i WHERE i.iid = $iid LIMIT 1");
// all posts relating to the item
postsRs = mysql_query("SELECT p.pid, p.desc, .... FROM posts p LEFT JOIN comments c ON p.pid = c.pid WHERE p.iid = $iid ORDER BY p.date DESC");
// all comments for all posts relating to the item
commentsRs = mysql_query("SELECT c.pid, c.cid, c.desc, .... FROM comments c INNER JOIN posts p ON p.pid = c.pid INNER JOIN items i ON p.iid = i.iid WHERE p.iid = $iid ORDER BY p.date DESC");
然后,您将需要创建显示此数据的方法。也许将所有这些功能封装到名为Item的DAO(数据访问对象)中,该函数在调用display()方法以所需格式显示数据之前检索所有这些所需的数据。
我不确定我的描述是否足够好。 想象一下,该项目是堆栈上的开放问题。 每个“帖子”都是堆栈上的答案。 每个评论是对答案的评论。 因此,从技术上讲,所有这些信息都只有一个视图 - 就像本网站一样。 – makowb
@makowb在这种情况下,Karolis对我的建议将是最好的方法,并结合查询来提取有关正在查看的项目的信息。 – GordyD
@戈登,最后一个查询应该加入帖子表不是评论两次:) – Karolis