1

在我的网站中,用户可以更新,其他人可以评论更新,就像其他社交网站一样。

在做什么:

query = fetches first name, last name, user id, update id, update post UNION same details for the user who has logged in i.e /* Updates Of Current Logged In User + Updates Of People He Is Following */

loop {
prints first name last name and update
}

后来我介绍了评论功能,所以现在我在循环中调用查询并再次运行循环以获取评论..

loop {
prints first name last name and update

commentquery = fetches firstname, last name, user id, comment, of the particulat post
    again loop {
         prints first/last name of the person who commented, and his comment
     }
}

现在根据我的说法,我想这可以通过 SQL 查询来完成,当我检索帖子时,我可以获取它的评论,或者这是正确的方法?问题是当外部循环运行时,内部循环也运行以获取适当的评论,所以我可以加入表来检索与帖子/更新相关的评论吗?

4

2 回答 2

1

如果没有您的数据库结构或实际 SQL,这很难回答,但我已尝试尽可能概括。您尝试做的事情应该通过带有两个查询和一个循环的 SQL 来完成,如下所示。

编辑您的精细循环并重新执行查询。您可以使用 SQL 一次性获取所有这些数据,但您将在每次调用中重复分配信息。为了可扩展性和可读性,我会坚持使用两个查询和两个循环

/** updated after op's comments **/

SELECT data, that, you, want, for, one, post
FROM posts AS a
INNER JOIN users AS b ON b.id = a.user_id

loop over query results () {

    /** output the post data **/

    /** Then select the users who have posted on this post **/
    SELECT a.comments, b.username
    FROM comments AS a
    INNER JOIN users AS b ON b.id = a.id
    INNER JOIN posts AS c ON c.id = a.post_id AND c.post_id = '[post id value]'
    ORDER BY a.date_posted;

    loop comments here {
      /** output comments here **/
    }
}
于 2012-09-25T12:11:31.870 回答
0

我认为将它合并到仅查询中可能是可能的,但不是很好。

但是,如果我理解正确,您不喜欢的是评论查询是在循环中使用不同的 WHERE 子句执行的。您可以通过在查询数据库以获取更新之前获取您在一个查询中显示的所有更新的所有评论来消除这种情况:

query = select all comments for all updates joined with usernames and whatnot
loop{
    $comments[postid][] = data
}

在此之后,您可以正常查询更新并从预加载的数组而不是数据库中访问评论。不确定这是否是更好的解决方案。从好的方面来说,你只有一个查询更新,一个评论,而不是一个更新,一个更新的评论。(当你有 10 个更新时,像 2 个查询而不是 11 个)。不确定差异是否真的很大。

缺点是,您之前的代码更加明显,因此其他人更容易阅读。

于 2012-09-25T12:34:00.097 回答