【问题标题】:Retrieving data from string(tags)从字符串(标签)中检索数据
【发布时间】:2014-07-19 09:44:50
【问题描述】:

脚本从用户获取输入并搜索数据库字段,命名标签。

标签包含例如:你好,嘿,如何,快乐,地狱......在单个单元格上的数据,或者你可以说作为一个字符串。

我尝试了下面的查询,但它只适用于你好,而不是如何,快乐,地狱..

$sql ="SELECT * FROM tws where tags='".$name."' or tags LIKE '".$name.",%' or tags LIKE
 ',%".$name.",%' or  tags LIKE '%,".$name."'";

注意:我在发布这个问题之前彻底搜索了谷歌和堆栈溢出,但无法让它工作。

【问题讨论】:

    标签: php mysql tags


    【解决方案1】:

    使用以下查询:

    $sql = "SELECT * FROM `tws` WHERE `tags` REGEXP (".$name.")";
    

    【讨论】:

    • 我收到此错误解析错误:语法错误,意外'".)"' (T_CONSTANT_ENCAPSED_STRING)
    • 是的,但它也给出了一些错误,谢谢,我真的很感激我希望有人可以指导我使用 php mysql 甚至是 web 开发。
    【解决方案2】:

    你有一个百分号放错了(第三个LIKE)并且MySQL非常严格:你必须在SQL中包含你的标签之间的空格:

    $sql ="SELECT * FROM tws where tags='".$name."' or tags LIKE '".$name.",%' 
           or tags LIKE '%, ".$name.",%' or  tags LIKE '%, ".$name."'";
    

    应该可以(去掉how后面的空格,这样你的数据就有固定的格式了)。

    PS:确保使用mysql(i)_real_escape_string 转义值$name

    考虑使用一个额外的表格来存储您的标签。例如tws_tags,带有字段 tws_idtag 以及带有 JOIN 的查询。

    【讨论】:

    • 非常感谢它的工作。你能给我推荐一本书,这样我就可以在 php 和 mysql 方面做得更好吗?
    • 对不起,没有。我大约 10 年前学过 PHP,所以我现在使用的任何东西都已经过时了;)
    【解决方案3】:

    您应该像这样在查询中省略逗号:

    $sql ="SELECT * FROM `tws` WHERE `tags` RLIKE '%[[:<:]]$name[[:>:]]%'";
    

    [[:&lt;:]][[:&gt;:]] 是 MySQL 中用于单词边界的特殊标记。此外,在双引号中,您可以使用变量而无需连接("blablabla $smth txt" 而不是 "blablabla " . $smth . " txt"

    【讨论】:

    • 非常感谢朋友们。你们都有这么多的知识,我希望我有一些,我会帮助其他人......无论如何,非常感谢。
    【解决方案4】:

    使用这个:

    $sql ="SELECT * FROM tws where tags='".$name."' or 
               tags LIKE '".$name."%' or tags LIKE
                 '%".$name."%' or  tags LIKE '%".$name."'";
    

    如果 name = ABC,您的查询如下所示

     $sql ="SELECT * FROM tws where tags='ABC' or tags LIKE 'ABC,%' or tags LIKE
     ',ABC,%' or  tags LIKE '%,ABC'";
    

    你可以看到它正在寻找 ,ABC 而不仅仅是 ABC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多