1

我将如何存储用户“帖子”?这样我就可以有效地从数据库中获取它们,然后在请求特定用户页面时处理它们以按时间顺序显示?

我是否将所有用户的所有帖子存储在一个表中,如下所示:

Post ID | Poster ID | Post Content | Posted to this Users Wall | Post Timestamp

然后,当用户打开 UserFoo 的页面时,我只会得到所有行在哪里Posted to this Users Wall = UserFoo

上面的示例不会使桌子变得笨重吗?

4

2 回答 2

2

users

id | name |

posts

|  id   |   u_id    |   content    |

wall

| id   |   u_id    |  post_id    |

u_id fromposts是 users.id,它是 Author

u_id fromwall是 users.id,它是 Target(贴在墙上)

你可以更清楚地命名它,即poster_id,target_id


另一种方法是拥有

post

| id | poster_id |

wall

| id | post_id  | target_id |

content

|  post_id | content |

您还可以添加其他特定的内容,例如帖子是否是评论或其他内容,在另一个表格中或表格中的post


function getUsersWallPosts($target_id) {
    $query = "SELECT c.content FROM content AS c, INNER JOIN wall AS w ON w.post_id = c.post_id WHERE w.target_id = $target_id";
    $result = someUserDefinedFunctionForQueryAndFetch($query);
    return $result
}
于 2013-06-21T13:17:54.467 回答
2

您建议的布局看起来很合理。5 列(四列INT和一列TEXT)根本不是“庞大”的表。

如果您有适当的索引,则查询WHERE "Posted to this Users Wall" = "UserFoo"几乎是即时的。

对于您的目标查询(按时间顺序显示发送到当前用户墙的帖子),最佳索引可能在(Posted to this Users Wall, Post Timestamp)(两列索引)。

于 2013-06-21T13:18:17.057 回答