使用Codeigniter中的帖子标签

时间:2012-07-22 02:09:34

标签: php mysql codeigniter

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

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

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

简而言之,我提出了这个解决方案:

  1. 从数据库中获取所有标签。
  2. 存储数组$ all。
  3. 获取用户输入的标签。
  4. 将它们存储在Array $ user
  5. 建立一个交叉点$存在
  6. 在foreach循环中
    • 在标签表中查询当前标签的ID
    • 在posts_has_tags表中插入ID。
  7. 对于另一个数组,我会为每个数组做另一个
    • 将标记插入标记表。
    • 获取insert_id()$ id
    • 将$ id插入posts_has_tags表。
  8. 嗯,我知道这有点乱。特别适合在数组中循环,这可能会有点时间..所以,我问你们:) 我对么 .. ? 有没有更简单的方法..?

    感谢。

1 个答案:

答案 0 :(得分: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;
    }
}

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