脚本从用户获取输入并搜索数据库字段,命名标记。
标签包含例如: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和堆栈溢出但无法使其正常工作。
答案 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_id
和tag
以及带有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"
)