【问题标题】:Working With Tags for posts in Codeigniter使用 Codeigniter 中的帖子标签
【发布时间】:2012-07-20 18:57:13
【问题描述】:

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

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

我使用多对多关系为每个帖子分配多个标签。但在将它们插入数据库之前我发现了困难。这些困难包括:“我怎么知道这个标签还没有存储在 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 表中。

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

谢谢。

【问题讨论】:

  • 为什么标签实际上需要是唯一的?
  • 因为我需要将多个帖子标记在特定标签中,例如旅行..

标签: php mysql codeigniter


【解决方案1】:

你可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2019-11-09
    • 2015-05-05
    • 2019-04-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多