0

我有一个页面,其中显示了我和我的朋友的最新状态更新。

涉及的表是 statusUpdates、users & friends。

我用来提取必要数据的脚本是 -

$myQuery = mysql_query("SELECT * FROM statusUpdates AS su
    LEFT JOIN friends AS fr ON fr.frContactID = su.authorID
    JOIN (users AS u) ON (u.roll = su.authorID)
    WHERE (fr.frHostID = ".$userLoggedIn['roll']." or su.authorID = ".$userLoggedIn['roll'].")
    GROUP BY su.statusID ORDER BY su.statusID DESC LIMIT 0,15");

我用这个打印了数据 -

if (mysql_num_rows($myQuery) == 0) echo "No updates to show";
else
{
    while ($row = mysql_fetch_assoc($myQuery))
    {
        // Print $row['statusID'], $row['status'], $row['authorID'], $row['fullName'], $row['userProfileLink'], etc
    }
}

现在我也在考虑加入评论系统。为此,我将创建一个包含以下字段的新表注释-commentID, targetStatusID, commentorID, comment, commentTimeStamp

我应该如何调整我的 mysql 查询,以便每个状态更新的评论也可以通过以下方式打印出来 -

status1
 - comment1
 - comment2
 - comment3
[text field for new comment to status1]

status2
 - comment1
[text field for new comment to status2]

status3
 [no comments for this post]
[text field for new comment to status3]

status4
 - comment1
 - comment2
[text field for new comment to status4]

[no more posts to show]

请注意——

commentID是主键。 targetStatusID指示发表评论的特定状态更新。 commentorID是评论者的 ID。 评论是实际内容。 commentTimeStamp显示发表评论的时间。

顺便说一句,我想使用过程编程来完成整个事情,而不是 OOP

解决此问题的方法之一是在 while 中使用查询($row = mysql_fetch_assoc($myQuery))来选择$row['statusID'].

但是,如果我想显示很多帖子,那会增加查询的数量。

那么我的方法应该是什么?

PS我遇到了类似的问题,但他们的答案都没有解决我的问题。

4

1 回答 1

0

我对你的结构做了一个 SQLfiddle。它不完全相同,但基础数据在那里。

http://sqlfiddle.com/#!2/c91cb/16

使用此结果,您可以使用explode 函数将评论获取到数组。我只设法获取带有分隔符和用户 ID 的评论。如果有人可以编辑查询,以便为他获取用户名,那就太好了

编辑 如果没有人会编辑查询,您可以分解这些 ID 并运行另一个查询,以便您获得用户名。如果您需要帮助,请发表评论

于 2013-08-18T07:36:41.287 回答