从字符串(标签)中检索数据

时间:2014-07-19 09:44:50

标签: php mysql tags

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

标签包含例如:hello,hey,how,happy,hell ..在单个单元格上的数据,或者你可以说是一个字符串。

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

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

注意:在发布此问题之前,我彻底搜索了google和堆栈溢出但无法使其正常工作。

4 个答案:

答案 0 :(得分:1)

使用以下查询:

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

答案 1 :(得分:0)

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

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

应该可以工作(如何删除空格,因此您的数据具有固定格式)。

PS:请务必使用mysql(i)_real_escape_string来转义值$name

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

答案 2 :(得分:0)

使用此:

$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

答案 3 :(得分:0)

您应该在查询中省略逗号,如下所示:

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

[[:<:]][[:>:]]是MySQL中用于字边界的特殊标记。另外,在双引号中,您可以使用变量而无需连接("blablabla $smth txt"而不是"blablabla " . $smth . " txt"