0

我正在做一个项目,让用户能够写一篇文章然后标记它。最后,其他用户进来并投票选出最佳帖子。

在我面临标记挑战之前,一切都像魅力一样:如何找出最简单的方法来处理它们?

我使用多对多关系为每个帖子分配多个标签。但在将它们插入数据库之前我发现了困难。这些困难包括:“我怎么知道这个标签还没有存储在 DB 中?”(当然,我将 name 字段设置为 UNIQUE,但如果有人输入了预存储的标签,他将面临我没有的 codeigniter 错误”不想让它显示出来。)..

所以简而言之,我想出了这个解决方案:

  1. 从数据库中获取所有标签。
  2. 存储数组 $all。
  3. 获取用户输入的标签。
  4. 将它们存储在数组 $user 中
  5. 建立一个交叉点 $existed
  6. 在 foreach 循环中
    • 查询标签表获取当前标签的id
    • 在 posts_has_tags 表中插入 ID。
  7. 对于另一个数组,我会为每个数组制作另一个
    • 将标签插入标签表。
    • 获取 insert_id() $id
    • 将 $id 插入到 posts_has_tags 表中。

好吧,我知道这有点乱。特别是对于随着时间的推移可能会有点大的数组循环..所以,我问你们:)我是否正确..?有没有更简单的方法..?

谢谢。

4

1 回答 1

0

你可以这样做:

SELECT * FROM `tags` WHERE `name`=:name_1 OR `name=:name_2 ...

然后,您可以获取结果标签并将它们从用户的标签数组中删除:

foreach ($user_tags as $tag) {
    if (!in_array($tag, $db_tags)) {
        $new_tags[] = $tag;
    }
}

这种方式只有两个查询,但我不能说如何保护此代码免受竞争条件的影响。

于 2012-07-22T03:40:03.330 回答