【问题标题】:PHP: Select a value from an imploded array in MySQLPHP:从 MySQL 中的内爆数组中选择一个值
【发布时间】:2012-05-26 20:47:17
【问题描述】:

我有一个标签系统,其中标签作为内爆数组存储在一行中,如下所示: “value1、value2、value3 等……”
我正在尝试创建一个标签搜索页面,但我不知道如何将其转换为数组以查看某人搜索的特定标签是否在数组中(因为我在使用 SELECT 时无法将其分解)。

任何人都可以帮助还是不可能?

谢谢大家的帮助,成功了。

【问题讨论】:

  • 不要忘记接受任何有帮助的答案。

标签: php mysql arrays select tags


【解决方案1】:

有一个名为FIND_IN_SETmysql 函数对逗号分隔的字符串进行操作。 例如:

SELECT * FROM posts WHERE FIND_IN_SET('some_tag', post_tags)>0

此处的文档:Mysql FIND_IN_SET

【讨论】:

    【解决方案2】:

    我认为更好的方法是规范化数据并将标签移动到单独的表中,然后将标签连接到您的实体。搜索会快速简单 =)

    【讨论】:

      【解决方案3】:

      从您的数据库中读取 $tags_str。

      字符串转数组:

         <?php
          $tags_str = "value1, value2, value3";
          $tags_arr = explode(', ', $tags_str);
          ?>
      

      然后使用in_array() PHP 函数进行数学搜索。

      【讨论】:

        【解决方案4】:

        您可以在选择查询中使用“LIKE”

        SELECT row FROM table WHERE tag LIKE '%search_value%'
        

        【讨论】:

        • 如果你有例如标签:'cat food','cat food supplies',这将失败。
        【解决方案5】:

        规范化你的数据库

        tags {
          object_id
          tag_id
        }
        

        或者,如果你很懒,那就去做吧

        UPDATE tags = CONCAT(",", tags, ",") FROM table
        

        然后

        SELECT * FROM table WHERE tags LIKE '%,selected_tag,%'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-12-15
          • 2015-04-05
          • 2021-02-25
          • 1970-01-01
          • 2019-07-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多