2012-07-22 58 views
0

我正在开发一个项目,使用户能够撰写帖子然后对其进行标记。最后,其他用户进来并投票选出最佳职位。使用Codeigniter中的帖子标签

在我面对标签挑战之前,一切都变得像一种魅力:如何制定出最简单的方法来处理它们?

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

因此,在短期的话,我想出了这个解决方案:

  1. 从数据库中获取的所有标签。
  2. 存储数组$ all。
  3. 获取用户输入的标签。
  4. 将它们储存在数组$用户
  5. 做一个交集$在foreach循环
    • 查询标签表当前标签
    • 的ID插入posts_has_tags表中的ID存在
  6. 为其他阵列我会再拍每个
    • 插入标签到标签表。
    • 获取insert_id()$ id
    • 将$ id插入到posts_has_tags表中。

好了,我知道这是一种混乱的。尤其是对于循环阵列,这可能会随着时间的推移而变大..所以,我问你们:) 我是否正确..? 有没有更简单的方法..?

谢谢。

+0

为什么标签实际上需要是唯一的? – 2012-07-22 03:36:37

+0

,因为我需要多个帖子才能在特定的代码中进行标记,例如旅行。 – adel 2012-07-22 09:57:12

回答

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; 
    } 
} 

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