将值存储在两个MySQL表中

时间:2013-04-25 16:22:33

标签: php mysql

我有一个场景,我不知道该怎么做。

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

今天去远足! #hiking

现在,我打算将帖子存储在一个名为" POSTS"结构如下:

post_id | user_id | text | date

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

tag_id | post_id | user_id | tag

唯一的问题是,在我将数据插入" POSTS"之前,我不知道帖子的post_id。 table(post_id是主键,是自动增量)。 现在,我想我可以从" POSTS"中选择最后一行数据。该用户的表(在我插入帖子后),然后依次使用返回的post_id作为我的查询,将标签数据插入" TAGS"表。这似乎不是最好的方法?我的问题是:

这是最好的解决方案还是有更好的方法来解决这个问题?

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

由于

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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

相关问题