1

我有一个场景,我不确定该怎么做。

我有一个网站,用户可以在其中更新他们的状态。我允许使用哈希标签,因此可能的用户帖子可能如下所示:

今天去远足了!!#远足

现在,我打算将帖子存储在一个适当命名为“POSTS”的表中,其结构如下:

post_id | user_id | text | date

现在,当用户提交包含帖子文本的表单时,我运行一个脚本来创建一个数组以获取用户使用的所有哈希标签术语,然后将它们存储在一个数组中。因此,我可以遍历该数组并将标签插入恰当命名的“TAGS”表中。现在这个表的结构是这样的:

tag_id | post_id | user_id | tag

唯一的问题是,直到我将数据插入“POSTS”表(post_id 是主键并且是自动递增)之后,我才知道帖子的 post_id。现在,我在想我可以从“POSTS”表中为该用户选择最后一行数据(在我插入帖子之后),然后将返回的 post_id 用于我的查询,将标签数据插入“标签”表。这似乎不是最好的方法?我的问题是:

这是最好的解决方案还是有更好的方法来解决这种情况?

我是 Stack Overflow 的新手,所以请不要投票给我。评论并告诉我我做错了什么,我会学习并提出更好的问题。

谢谢

4

3 回答 3

1

您可以非常简单地获取最后插入的 ID:如果您不使用 PDO,则为 mysql_insert_id();如果您使用,则使用函数 lastInsertId()。

于 2013-04-25T16:26:26.970 回答
0

在两个表中都有一个新列 - unique_id - 它包含您在查询数据库之前在代码中生成的字符串。这样你就有一个 id 在提交之前将帖子和标签绑定在一起。我一直将这种方法用于类似的应用程序。

唯一的问题是唯一性,但有多种方法可以生成唯一 ID(我通常混合使用时间戳和散列)。

于 2013-04-25T16:27:58.643 回答
0

这种类型取决于您使用的 mysql 版本以及您希望如何组织代码。

选项 1. 完全按照你所说的去做。PHP 将包含管理数据库以及如何将数据存储到数据库中的代码。我在您概述的内容中看到的唯一缺点是,如果处理主题标签存在问题,那么您可能会将帖子插入数据库,但哈希部分未成功完成。对于某些应用程序(如银行帐户),这可能是不可接受的,这就是数据库事务的用途。

选项 2。另一种处理方法是编写一个 mysql 存储过程,它同时执行插入和处理哈希标记。存储过程还可以将整个事物包装在事务中,以使您的数据库保持一致。请注意,这需要支持存储过程的 mysql 版本。这样做的不好的一面是你必须用 mysql 编写,这与 PHP 不同。

mysql 和 PHP 都可以处理这个应用程序逻辑/数据存储逻辑。这是您希望如何组织代码的问题。我宁愿保持层次不同。即使您要在 PHP 中执行此操作,也至少有一个单独的类来处理数据库而不做任何其他事情。当您的代码变得更大时,拥有一个单独的类或模块或命名空间来管理这些类型的代码确实使它们更容易更改和测试。

于 2013-04-25T16:37:46.120 回答